我发现我无法使用 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 asyncnative async )的误报。这是因为本地异步函数是 AsyncFunction 的实例,而不是直接的 Function

这是为什么不应该总是使用 jQuery 的另一个原因,因为它可以。 jQuery 辅助函数在没有 native 替代品或不稳定时是必不可少的 - 但现在不再是了。

关于javascript - jQuery 代理不调用异步函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45337824/

10-12 00:11
查看更多