繁体   English   中英

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM