为了使这个问题对尽可能多的人有用,我将排除我的具体实现细节,除了我正在使用下面的Node Express的Bluebird promise库 .
所以,假设我有以下链(其中 P
返回一个promise, res
是Express HTTP响应对象):
P().then(function(){
// do nothing if all went well (for now)
// we only care if there is an error
}).catch(function(error){
res.status(500).send("An error occurred");
}).then(function(){
return P();
}).then(function(pVal1){
return [pVal1, P()];
}) // TODO: catch an error from P() here and log pVal1
.spread(function(pVal1, pVal2){
if(pVal1 === pVal2) {
console.log("Success!");
} else {
console.log("Failure");
}
});
我在上面放置 TODO
注释的地方是我想要捕获可能在我调用 P
时出现的错误 . 如果我发现错误,我想记录 pVal1
然后发送500错误,就像在第一次捕获中所做的那样 . 但是,我不确定这是否可能与我如何构建我的链 .
我相信我需要做一些“分支”,但我认为我不能理解这个概念,以阻止JavaScript的异步特性使我最好!因此,任何帮助都是非常感谢 .
2 回答
不要忘记在链的末尾捕捉错误 . 这也是发送回复的地方 .
在链中间捕获错误是为了间歇性的错误处理;链继续运行,所以暂时不发送回复 .
这是尝试它的东西:
如果您使用显式
Promise.all
而不是将数组返回到.spread
,则可以执行此操作 .