gpt4 book ai didi

javascript - 如何从异步代码中捕获错误

转载 作者:行者123 更新时间:2023-11-29 10:02:24 26 4
gpt4 key购买 nike

下面的代码行能够捕获错误(因为它是同步的)

 new Promise(function(resolve, reject) {
throw new Error("Whoops!");
}).catch(alert);

但是当我像下面这样修改我的代码时

 new Promise(function(resolve, reject) {
setTimeout(() => {
throw new Error("Whoops!");
}, 1000);
}).catch(alert);

它无法捕获错误。我有一个用例,我想在其中捕获此错误。我怎样才能实现它?

点击链接“https://bytearcher.com/articles/why-asynchronous-exceptions-are-uncatchable/”,我能够理解为什么会这样。只是想知道是否还有任何解决方案可以捕获此类错误。

请注意,通过使用 setTimeout,我指的是异步调用的使用,当我在获取语句中提供不正确的 URL 时,它可以给出一些响应或给出错误。

fetch('api.github.com/users1')   //'api.github.com/user'is correct url
.then(res => res.json())
.then(data => console.log(data))
.catch(alert);

最佳答案

您需要一个 try/catch inside 您要求 setTimeout 调用的函数:

new Promise(function(resolve, reject) {
setTimeout(() => {
try {
throw new Error("Whoops!"); // Some operation that may throw
} catch (e) {
reject(e);
}
}, 1000);
}).catch(alert);

setTimeout 函数的调用完全独立于 promise 执行器函数的执行上下文。

在上文中,我假设 throw new Error("Whoops!") 是可能引发错误的操作的替代,而不是实际的 throw 语句。但是如果你真的在做 throw,你可以直接调用 reject:

new Promise(function(resolve, reject) {
setTimeout(() => {
reject(new Error("Whoops!"));
}, 1000);
}).catch(alert);

关于javascript - 如何从异步代码中捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52868558/

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