Promise.map中的异步方法

时间:2017-10-15 11:24:24

标签: javascript node.js asynchronous bluebird

我需要帮助来理解如何在.map方法中调用异步方法。我需要等到所有异步方法都完成,然后使用async方法修改的值。

我的代码如下

//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 个答案:

答案 0 :(得分: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);
});