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 辅助函数在没有本机替代品或不稳定的情况下是不可或缺的 - 但现在不再是了。
我发现无法使用 $.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 辅助函数在没有本机替代品或不稳定的情况下是不可或缺的 - 但现在不再是了。