JS事件处理程序:异步函数

时间:2018-05-31 11:30:49

标签: javascript cordova event-handling async-await

我正在使用Cordova构建应用。在一个页面上,有一个EventListener调用异步函数。 window.addEventListener("load", loadEdit(), false);

该功能看起来像async function loadEdit(){...}

在浏览器中测试时,即使功能完全执行,我也会收到以下错误:

  

TypeError:Property' handleEvent'不可赎回。

但是,如果我将EventListener更改为另一个函数然后调用异步函数,则似乎没有问题。 例如:

window.addEventListener("load", loadPre(), false);
...
function loadPre()
{
  loadEdit();
}
  1. EventListener调用异步函数有什么问题?
  2. 为什么没有检测到第二种方法也调用了异步函数?

1 个答案:

答案 0 :(得分:3)

您可以从eventlistener调用异步函数。

我看到的第一个问题是你在window.addEventListener的第二个参数中立即调用回调函数,将其包含为loadEdit()而不是loadEdit() => loadEdit() 。你必须给它一个函数作为第二个参数,现在你给出一个Promise或loadPre()的返回值。

尝试这种方式:

window.addEventListener("load", () => loadEdit(), false);

async function loadEdit() {
    // do the await things here.
}

异步函数返回promise。因此,如果您想在loadEdit之后执行某些操作,请尝试:

window.addEventListener("load", () => {
    loadEdit().then(// callback function here);
}, false);

async function loadEdit() {
    // do the await things here.
}