jQuery代理不调用异步函数

mac*_*bem 4 javascript jquery asynchronous async-await ecmascript-2017

我发现我无法调用async函数$.proxy.我的情况是我代理了事件监听器,以便它们仍然具有相同的上下文,但是一旦我尝试代理一个async函数,它就没有被调用 - 而且,没有抛出任何错误.

任何人都可以解释为什么这不起作用?

下面的简单示例将允许您重现该问题.当async关键字存在时,将不会调用该函数.当你删除时async,它将开始工作.

$('div').on('click', $.proxy(example, this));

async function example() {
  console.log('test');
}
Run Code Online (Sandbox Code Playgroud)

Est*_*ask 5

$.proxy很多年前很棒.async/await是ES2017,我们已经有了 bindES5:

$('div').on('click', example.bind(this));
Run Code Online (Sandbox Code Playgroud)

所以我们有异步箭头:

const example = async () => {
  console.log('test');
}
Run Code Online (Sandbox Code Playgroud)

$.proxy 使用自定义$.isFunction检查而不是普通typeof fn === 'function'检查.这导致本机异步函数的错误否定(转换为异步本机异步).这是因为本机异步函数是实例AsyncFunction,而不是Function直接实例.

这是为什么jQuery不应该只是因为它可以使用的另一个原因.当没有本地替代品或者它们是片状的时候,jQuery辅助函数是不可或缺的 - 但现在不再存在了.