javascript - Lodash: _.forEach 函数

标签 javascript lodash

我正在尝试使用 lodash forEach具有调用 mongo 数据库的嵌套函数的方法。

var jobs = [];
_.forEach(ids, function(id) {
    JobRequest.findByJobId(id, function(err, result) {
        if(err) callback(err);
        jobs.push(result);
    });
});

callback(null, jobs);

我遇到了问题,因为 forEach 和回调将在调用内部函数之前运行。我该如何解决这个问题?

我希望在 for each 和 inner 函数完成后调用回调。

最佳答案

另一种方法是将所有内容都包装到 promise 中,在这种情况下,作业结果将按正确顺序推送到数组中:

var promises = ids.map(function(id) {
    return new Promise(function(resolve, reject) {
        JobRequest.findByJobId(id, function (err, result) {
            if (err) reject(err);
            resolve(result);
        });
    });
});

Promise.all(promises).then(function(jobs) {
    callback(null, jobs);
}, callback);

// or shorter: Promise.all(promises).then(callback.bind(null, null), callback);

请注意,您还需要处理 JobRequest.findByJobId 请求失败时的潜在情况,使用 promises 非常简单:只需将 callback 作为错误回调传递给 Promise.all

关于javascript - Lodash: _.forEach 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32385040/

相关文章:

javascript - 使用 LODASH 比较 2 个数组来查找缺失的信息

javascript - Angular2 中页面发出过多 HTTP 请求

Javascript 从网络响应中获取值

javascript - 使用 lodash 重置对象数组

javascript - 使用 Lodash 根据 ID 添加对象到父数组

javascript/lodash : how to do a recursive deep get in an object thanks to a sub tree object

javascript - 如何从任何深度的嵌套 javascript 对象中删除属性?

javascript - 如何在 Javascript 中的 forEach 循环内正确链接 Promise

javascript - 在 fullcalendar v4 中编辑和删除事件

javascript - setTimeout(myFunction, 5000);与 setTimeout(myFunction(), 5000);