【发布时间】:2019-08-06 07:08:49
【问题描述】:
我想使用 onerror 来拦截和记录我的 JavaScript 应用程序中发生的所有错误。除了使用 Promise 或异步函数时,这可以按预期工作。
在下面的截图中,fail 引发的异常按预期被拦截,但 rejectPromise 和 throwAsync 不是调用 onerror 处理程序,而是始终在控制台中显示 Uncaught (in promise) Error?
如何始终拦截使用 Promise 和异步函数的代码库中的所有错误?
window.onerror = function(message, source, lineno, colno, error) {
console.log('onerror handler logging error', message);
return true;
}
function rejectPromise() {
return Promise.reject(new Error('rejected promise'));
}
async function throwAsync() {
throw new Error('async exception');
}
function fail() {
throw new Error('exception');
}
rejectPromise().then(() => console.log('success'));
throwAsync();
fail();
【问题讨论】:
-
为此,Promise 有第二个参数,即拒绝函数处理程序,可以通过在 Promise 上使用 .catch() 来处理。这意味着 Promise 已经使用 try/catch
标签: javascript promise onerror