gpt4 book ai didi

javascript - 我可以在不等待的情况下捕获异步方法的异常吗?

转载 作者:搜寻专家 更新时间:2023-11-01 00:34:29 26 4
gpt4 key购买 nike

如何在不抛出 await 的情况下捕获 doAsyncThing 的异常? doAsyncThing 的每次运行都是幂等的,所以我只希望所有操作“同时”发生,然后结束该过程。我意识到,即使我将 try/catch 放入 map 中,它实际上也不会在那里捕获它,因为此时它不在同一个线程中。

const promises  = entities.map(entity => {
return entity.doAsyncThing();
});

await Promise.all(promises);

最佳答案

Can I catch exceptions from async methods without await?

不,不是 try/catch。当您的 map 回调完成时,您的异步任务甚至还没有完成。 promises 包含一组 Unresolved promises(假设doAsyncThing 实际上是在进行异步工作并且不直接返回已解决或被拒绝的promise)。

根据您具体想要做什么,您有多种选择。

  • map 中使用 catch 来单独处理每一件事:
const promises  = entities.map(entity => {
return entity.doAsyncThing().catch(error => /* do something */);
});
await Promise.all(promises);
  • Promise.all 上使用 catch:
const promises  = entities.map(entity => {
return entity.doAsyncThing();
});
Promise.all(promises).catch(error => /* do something */);
  • 使用try/catch:
const promises  = entities.map(entity => {
return entity.doAsyncThing();
});
try {
await Promise.all(promises)
} catch (ex) {
// do something
};

关于javascript - 我可以在不等待的情况下捕获异步方法的异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58223219/

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