2015-02-10 105 views
0

我一直在使用拒绝来结束承诺,但我有一个使用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) { 

    }); 
}; 

在我的控制器错误成功的承诺误差函数登陆:

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

回答

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

是好的 - 那么你的承诺模式是因为它的模型同样的事情基本上都是精品。

+0

它似乎没有在控制器上的try/catch块正常工作。它在promise错误函数中着陆。看起来好吗? – cyberwombat 2015-02-10 17:49:37

+0

这是一个类似的代码,看起来像没有承诺而不是实际的代码。 – 2015-02-10 18:09:40