2017-10-15 82 views
0

我需要幫助瞭解如何在.map方法中調用異步方法。我需要等到所有的異步方法完成,然後使用修改後的異步方法的值。Promise.map內的異步方法

我的代碼如下

//declared during init 
var Promise = require("bluebird"); 

Promise.map(objectArray, function (item) { 

    mongoDB.findOne({ 
     itemId=item.id 
    }) 
     .then(function (result) { 
      item.set({newValue:result.foo}); 
      return item.toObject(); 
     }) 
     .catch(function (err) { 

     }); 
}).then(function (modifiedObjectArray) { 
    return res.status(200).send(modifiedObjectArray); 
}); 

在上述情況下,地圖的那麼函數只要迭代完成其任務調用。我如何等待所有數據庫任務完成。

回答

1

您應該從回調返回承諾:

Promise.map(objectArray, function (item) { 
    return mongoDB 
     .findOne({itemId: item.id}) 
     .then(function (result) { 
      item.set({newValue: result.foo}); 
      return item.toObject(); 
     }) 
     .catch(function (err) { 

     }); 
}).then(function (modifiedObjectArray) { 
    return res.status(200).send(modifiedObjectArray); 
}); 
+0

:)奏效。我對「承諾」這個概念完全陌生。從來不知道地圖內可以有兩個回報 –

+0

'不知道地圖內可以有兩個回報 - 沒有 –