我有一系列承诺,如下所示:
Transaction.findPublic({}).then(function(transactions) {
combined = combined.concat(transactions);
return JoinEvent.find().exec();
}, function(err) {
return res.status(503).send(err);
}).then(function(joins) {
combined = combined.concat(joins);
return NewCategoryEvent.find().exec();
}, function(err) {
return res.status(503).send(err);
});
目前还不清楚这个res.send()
是否会真正退出我的承诺链。它可能会被发送到下一个.then()
,这肯定不会起作用。
我正在尝试使用jasmine测试框架测试它,但我使用自己的模拟res对象。模拟显然没有退出函数的逻辑,但我想知道真正的表达res对象是否有。
return res.send()
会退出此承诺链吗?如果没有,我可以通过抛出错误来突破吗?
答案 0 :(得分:1)
Transaction.findPublic({}).then(function(transactions) {
combined = combined.concat(transactions);
return JoinEvent.find().exec();
}).then(function(joins) {
combined = combined.concat(joins);
return NewCategoryEvent.find().exec();
}).catch(function(err) {
res.status(503).send(err);
});
解释:当您链接promises并发生reject
(错误)时,它会跳过所有后续fullfill
(成功)回调,直到{{1找到(错误)回调,它调用第一个发现的拒绝回调(然后继续到下一个承诺),如果没有找到,则抛出错误。
同样rejection
相当于catch(func)
,但更具可读性。
了解更多信息:promise error handling.