gpt4 book ai didi

javascript - 为什么 onerror 不拦截来自 promises 和 async 函数的异常

转载 作者:行者123 更新时间:2023-11-29 16:31:55 32 4
gpt4 key购买 nike

我想使用 onerror 拦截并记录我的 JavaScript 应用程序中发生的所有错误。除了使用 promises 或异步函数时,这按预期工作。

在下面的片段中,fail 抛出的异常按预期被拦截,但是 rejectPromisethrowAsync 总是显示一个控制台中未捕获( 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com