我发现我无法使用async
调用$.proxy
个函数。我的情况是我代理了事件监听器,以便它们仍然具有相同的上下文,但是一旦我尝试代理async
函数,它就没有被调用 - 也没有抛出任何错误。
有人能解释一下为什么这不起作用吗?
下面的简单示例将允许您重现该问题。当async
关键字存在时,将不会调用该函数。当您删除async
时,它将开始工作。
$('div').on('click', $.proxy(example, this));
async function example() {
console.log('test');
}
答案 0 :(得分:5)
$.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'
检查。这会导致本机异步函数(transpiled async vs native async)的误报。这是因为本机异步函数是AsyncFunction
的实例,而不是Function
的实例。
这是为什么jQuery不应该只是因为它可以使用的另一个原因。当没有本地替代品或者它们是片状的时候,jQuery辅助函数是不可或缺的 - 但不再是。