javascript - Promise.map 中的异步方法

标签 javascript node.js asynchronous bluebird

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

在上面的情况下,迭代器完成其任务后就会调用映射的 then 函数。如何等待所有数据库任务完成。

最佳答案

您应该从回调中返回 promise :

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

关于javascript - Promise.map 中的异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46754509/

相关文章:

javascript - 如何在jquery中以半小时间隔获取选择框中的时间

javascript - Nodejs 和 Expressjs : Constants in global variable

node.js - 我可以在 mongoose.js 模型中填充引用,而不是每次查询时吗?

node.js - 将 async/await 与 setTimeout 函数结合起来

asynchronous - 在 s3 中传输数据的有效方法

javascript - 在 iFrame 中设置 cookie

javascript - jquery 上的动画损坏

javascript - 表达类型错误: undefined is not a function

java - 添加到 ListenableFuture 中的 FutureCallbacks 是否异步执行?

Javascript:搜索子字符串模式并返回找到的字符串