投掷错误以结束承诺链

时间:2015-02-10 17:38:05

标签: node.js mongoose promise

我一直在使用拒绝来结束承诺,但我有一种情况使用Mongoose(有承诺)我需要拒绝。我抛出一个错误,似乎一切都好。这是个好主意吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

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

很好 - 那么你的承诺模式很好,因为它基本上模拟了相同的东西。