在第一个错误回调时退出promise链

时间:2015-02-13 02:38:03

标签: javascript node.js express mongoose jasmine

我有一系列承诺,如下所示:

   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()会退出此承诺链吗?如果没有,我可以通过抛出错误来突破吗?

1 个答案:

答案 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.