【发布时间】:2022-01-22 17:07:24
【问题描述】:
我正在使用 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();
}
【问题讨论】:
-
"当
sideEffect函数抛出错误时" - 你的意思是它返回一个将拒绝的承诺吗?它似乎是一个异步函数,所以它@987654321@。 -
sideEffect().catch(console.error);是just what you want。 -
@Bergi 是的。
sideEffect函数是异步的。但是,如果sideEffect函数在routeHandler函数解析之前拒绝,则mainEffect函数的执行将停止。 -
不,它没有。除非效果以某种方式相关,否则
mainEffect不会受到影响。如果您仍然使用您的代码,请提供minimal reproducible example。
标签: javascript promise callback es6-promise