jQuery代理不调用异步函数

时间:2017-07-26 21:33:58

标签: javascript jquery asynchronous async-await ecmascript-2017

我发现我无法使用async调用$.proxy个函数。我的情况是我代理了事件监听器,以便它们仍然具有相同的上下文,但是一旦我尝试代理async函数,它就没有被调用 - 也没有抛出任何错误。

有人能解释一下为什么这不起作用吗?

下面的简单示例将允许您重现该问题。当async关键字存在时,将不会调用该函数。当您删除async时,它将开始工作。

$('div').on('click', $.proxy(example, this));

async function example() {
  console.log('test');
}

1 个答案:

答案 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辅助函数是不可或缺的 - 但不再是。