2017-10-15 52 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

'不知道地图内可以有两个回报 - 没有 –