我发现我无法使用 async
调用 $.proxy
函数。我的情况是我代理了事件监听器,以便它们仍然具有相同的上下文,但是一旦我尝试代理到 async
函数,它就没有被调用 - 而且,也没有抛出错误。
谁能解释我为什么这不起作用?
下面的简单示例将允许您重现该问题。当 async
关键字存在时,该函数将不会被调用。当您删除 async
时,它将开始工作。
$('div').on('click', $.proxy(example, this));
async function example() {
console.log('test');
}
最佳答案
$.proxy
多年前很棒。 async/await 是 ES2017,从 ES5 开始我们已经有了 bind
:
$('div').on('click', example.bind(this));
所以我们有异步箭头:
const example = async () => {
console.log('test');
}
$.proxy
uses custom $.isFunction
检查而不是普通的 typeof fn === 'function'
检查。这会导致 native 异步函数( transpiled async 与 native async )的误报。这是因为本地异步函数是 AsyncFunction
的实例,而不是直接的 Function
。这是为什么不应该总是使用 jQuery 的另一个原因,因为它可以。 jQuery 辅助函数在没有 native 替代品或不稳定时是必不可少的 - 但现在不再是了。
关于javascript - jQuery 代理不调用异步函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45337824/