在第一次错误回调时退出承诺链

Exit promise chain on first error callback

我有一个看起来像这样的承诺链:

   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 对象。模拟显然没有退出函数的逻辑,但我想知道真正的 express res 对象是否有。

return res.send() 会退出这个承诺链吗?如果没有,我可以通过抛出错误来代替吗?

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);
    });

解释:当你链接承诺并发生reject(错误)时,它会跳过所有后续的fullfill(成功)回调直到找到 rejection(error) 回调,它调用第一个找到的拒绝回调(然后继续下一个承诺),如果找到 none,它抛出一个错误。

catch(func) 等同于 then(undefined, func) 但更具可读性。

更多信息:promise error handling.