Promise.map 中的异步方法

Async method inside Promise.map

我需要帮助来理解如何在 .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);
});

在上述情况下,一旦迭代器完成其任务,就会调用 map 的 then 函数。如何等到所有数据库任务完成。

你应该return你的回调承诺:

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