2016-07-03 30 views
-1

我剛剛使用node.js,現在我正在研究一個查詢mongodb的API。使用async/q/promises處理錯誤

以下函數apiRequest需要調用兩個函數,每個函數執行一個單獨的數據庫查詢。當前函數的問題是,如果其中一個查詢有某種錯誤,我將無法捕獲它。

什麼是最好的方式來實現這個,以便正確處理錯誤。有人指向我的異步庫,並提到我必須做一些承諾,但我真的不知道。理想情況下,我不想更改dbQueryOne和dbQueryTwo的定義,因爲它們正在其他地方使用。

exports.apiRequest =function(req,res) { 
    dbQueryOne(req.body.inputA); 
    dbQueryTwo(req.body.inputA); 
    res.send('Moved For Further Action',200); 
} 
+1

*「......我不會能夠抓住它。」 *爲什麼不?要麼你調用的函數是同步的,你使用'try/catch',或者(這裏可能是這種情況)它是異步的,在這種情況下,它給你一個機制來發現錯誤發生。 (這可能涉及許諾,或者可能不會;在NodeJS中,目前通常不會,但這種情況正在迅速改變。) –

回答

0
exports.apiRequest = function(req,res) { 
    dbFuncs = [dbQueryOne(req.body.inputA), dbQueryTwo(req.body.inputA)]; 
    Promise.all(dbFuncs) 
    .then(result => { 
    res.send('Moved For Further Action',200); 
    }) 
    .catch(err =>{ 
    //catch err 
    }); 
} 

您可以使用promise.all運行多個查詢和趕上發生在catch塊中的任何錯誤