jQuery 代理不调用异步函数

jQuery proxy doesn't call async functions

我发现无法使用 $.proxy 调用 async 函数。我的情况是我代理了事件侦听器,以便它们仍然具有相同的上下文,但是当我尝试代理到 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 check instead of plain typeof fn === 'function' check. This results in false negative for native async functions (transpiled async vs native async). This results from the fact that native async functions are instances of AsyncFunction,不是直接Function

这是为什么 jQuery 不能仅仅因为它可以而总是被使用的另一个原因。 jQuery 辅助函数在没有本机替代品或不稳定的情况下是不可或缺的 - 但现在不再是了。