JS Event Handler: асинхронная функция - PullRequest
0 голосов
/ 31 мая 2018

Я создаю приложение с помощью Cordova.На одной странице есть EventListener, который вызывает асинхронную функцию.window.addEventListener("load", loadEdit(), false);

Функция выглядит следующим образом async function loadEdit(){...}.

При тестировании в браузере появляется следующая ошибка, даже если функция полностью выполняется:

TypeError: Свойство handleEvent не вызывается.

Однако, если я изменю EventListener на другую функцию, которая затем вызывает асинхронную функцию, похоже, проблем не будет.Например:

window.addEventListener("load", loadPre(), false);
...
function loadPre()
{
  loadEdit();
}
  1. В чем проблема с вызовом асинхронной функции EventListener?
  2. Почему он не обнаруживает, что второй метод также вызывает асинхронную функцию?

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете вызвать асинхронную функцию с вашего EventListener.

Первая проблема, которую я вижу, заключается в том, что вы сразу же вызываете функцию обратного вызова во втором аргументе window.addEventListener, включив ее как loadEdit() вместо loadEdit или () => loadEdit().Вы должны дать ему функцию в качестве второго аргумента, прямо сейчас вы даете Promise или возвращаемое значение loadPre().

Попробуйте следующим образом:

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

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

Асинхронная функция return Promises,Итак, если вы хотите что-то сделать после loadEdit, попробуйте:

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

async function loadEdit() {
    // do the await things here.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...