我想使用 onerror 拦截并记录我的 JavaScript 应用程序中发生的所有错误。除了使用 promises 或异步函数时,这按预期工作。
在下面的片段中,fail
抛出的异常按预期被拦截,但是 rejectPromise
和 throwAsync
总是显示一个控制台中未捕获( promise )错误
?
我如何始终拦截使用 promises 和异步函数的代码库中的所有错误?
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();
最佳答案
您可以为 onunhandledrejection
添加一个窗口处理程序,因为未处理的 Promise 拒绝与错误不完全相同。在您的浏览器控制台中检查以下代码段的结果(不是代码段控制台,它会在尝试显示大对象时出现问题):
window.onerror = function(message, source, lineno, colno, error) {
console.log('onerror handler logging error', message);
return true;
}
window.onunhandledrejection = function(errorEvent) {
console.log('onunhandledrejection handler logging error', errorEvent);
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();
关于javascript - 为什么 onerror 不拦截来自 promises 和 async 函数的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55178612/