2015-02-10 75 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