在异步函数(Javascript)中捕获未捕获的异常

时间:2019-03-19 20:53:10

标签: javascript exception async-await

目前,我有如下代码:

window.onerror = function() {
    // Send some debug info about the defective error handling,
    // so that it may be fixed
};

处理其他未捕获的异常。不幸的是,这不适用于async函数。例如,如果我们在下面调用fooasync()

async function fooasync() {
    throw 'Catch me!';
}

然后,window.onerror包罗万象的内容将不会捕获到异常(如果没有捕获的话)...

我已经完成了必要的搜索,并且大多数人都回答了这一问题,“这是不可能的,无论如何,这很糟糕,您应该明确地抓住它。”我当然同意,但是如果您不小心没有将async函数包装在try...catch中怎么办?

作为有效用例的示例:我使用window.onerror处理程序向我发送了一封调试电子邮件,以让我知道使用我的东西的人发生了严重错误。很好,至少我知道这个问题:现在,我可以解决问题(甚至可以使用显式try...catch来解决错误的错误处理)。但是,在使用async函数的情况下,我什至没有办法意识到这个问题(除了有人抱怨它没有按预期的方式工作)。

是否可以捕获这些async未捕获的异常?

1 个答案:

答案 0 :(得分:2)

类似于onerror,有onunhandledrejection,如果Promise拒绝并且没有附加处理程序,则将触发(package-initialize) (elpy-enable) Read on on MDN