如何在某些异步作业失败的情况下保持函数不失败



我正在用Node.js(基于Nest.js(做一个后端服务器。每个路由处理程序主要查询/修改数据库(主要效果(,有时还会将事件发送到外部服务器、留下日志等(副作用(。

我希望每个路由处理程序函数在只有副作用抛出错误而主作用运行良好时不会失败(行为1(。我还希望副作用与主作用并行执行,这样可以减少执行每个路由处理程序函数的时间(行为2(。

如何在javascript中实现这种行为?我第一次尝试这个代码:

async routeHandler() {
sideEffect().catch(console.error)
await mainEffect();
}

但是,当sideEffect函数抛出错误时,routeHandler函数将失败。我可以下一步尝试,但它不满足行为2。

async routeHandler() {
try {
await sideEffect();
} catch (error) {
console.error(error);
}
await mainEffect();
}

也许您想要使用的是Promise.allSettled?

  • 并行运行异步任务
  • 即使其他异步任务已被拒绝,其他异步任务仍应继续

文档链接:同时检查兼容性部分。

最新更新