gpt4 book ai didi

javascript - es6 promise swallow 类型错误

转载 作者:数据小太阳 更新时间:2023-10-29 05:14:59 26 4
gpt4 key购买 nike

我希望浏览器在发生类型错误时显示错误消息。
错误如无法读取未定义的属性 undefined reference

new Promise(function(resolve,reject){
// do stuff ...
reject('something logical is wrong');
}).catch(e => console.error(e));

new Promise(function(resolve,reject){
// do stuff, and a syntax error :/
var a = { };
a.something.otherthing = 1; /* we have an error here */
// ...
}).catch(e => console.error(e));

在第一个示例中,错误是逻辑错误,可以在 catch(..) block 中捕获它。
但在第二个例子中,这是一个明显的开发错误,在开发新东西时经常发生。我不想捕捉到它,我希望浏览器像控制台中的其他错误一样向我显示错误。我希望能够打开 chrome 异常时暂停 并查看其他变量的状态。我想在控制台中查看堆栈跟踪。
我希望它表现得像一个正常错误。

有什么想法吗?

最佳答案

与同步代码中的异常不同,一旦代码返回到idle,它就会变得未捕获,浏览器通常不知道 promise 链的逻辑结束,这是一个异步错误可以被认为未被捕获的地方。链毕竟是动态组装的,因此最好用最终的 .catch 终止。在链的逻辑端,即空闲的异步等价物。

有一个决赛.catch(e => console.error(e))对我来说似乎很合理,但你是对的,浏览器倾向于以不同于未捕获异常的方式显示这些错误。如果你想让它们看起来一样,你可以使用这个技巧:

.catch(e => setTimeout(() => { throw e; }))

这将抛出 e ,包含原始堆栈跟踪和行号,在下一个循环中,在 promise 链之外,没有任何东西会捕获它,它将被报告为未捕获。我们使用 setTimeout克服 .catch 的默认行为这是为了在您打算继续链接时捕获链中的任何异常。

有了这个,我希望你明白“逻辑”错误和其他错误之间的任何区别都是无关紧要的。任何到达链尾的错误对链来说都是致命的,即未捕获(当然,您可以从最终捕获中的其他错误中“逻辑”分类,并根据需要以不同方式显示它们。 )

关于javascript - es6 promise swallow 类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33376308/

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