抛出错误以结束承诺链

Throwing error to end promise chain

我一直在使用 reject 来结束 promises,但在使用 Mongoose(内置 promises)的情况下我需要拒绝。我抛出一个错误,一切似乎都很好。这是个好主意吗?

my Method = function() {
  return User.findById(id).exec()
    .then(function(user) {
      if(!user) throw new Error('not found');

      // Do stuff that continues chain
      return abc();
    })
    .then(function(abcResult) {

    });
};

在我的控制器中,错误成功地出现在 promise 错误函数中:

myMethod('123').then(function(res) {
  //result from abc();
}, function(err) {
   //status 404
});

通常您会在同步代码中抛出异常的任何地方提出拒绝(可能通过抛出异常)。

客观 - 如果您认为这在同步代码中很好:

function method(id){
   var user = findById(id);
   if(!user) throw new Error('not found');
   var res = abc();
   return bcdEf(res);
}

并且拥有:

try{
   var res = myMethod('123');
   // handle result
} catch(e){
   return 404;
}

很好 - 那么您的 promise 模式就很好,因为它基本上模拟了相同的事物。