如何处理事件调用的异步函数?

How to handle an async function called by an event?

假设我有一个名为 'Main' 的异步函数,它在页面加载期间被调用,如下所示:

window.addEventListener('load', Main);

由于 Main 是一个异步函数,我想通过附加 .catch((e)=>{ console.error(e);}); 从它的承诺链中捕获错误。但是,我认为这与 window.addEventListener(returns 未定义)配合得不好,并且只期望函数的赋值作为第二个参数。

是否可以在不创建包装函数的情况下处理 Main 的承诺拒绝?

你有两个选择:

  1. 使用包装函数,或者

  2. 使用try/catch

    处理Main内的所有错误

例如:

window.addEventListener("load", evt => {
    Main(evt).catch(err => {
        //...handle/report error...
    });
});

Main:

async function Main(evt) {
    try {
        // ...your logic...
    } catch (e) {
        //...handle/report error...
    }
}

在这两种情况下,请确保“handle/report 错误”代码本身不会引发错误。 :-)