【发布时间】:2018-12-26 17:47:42
【问题描述】:
我创建了一个承诺,当 async.eachSeries 完成其任务时返回结果,当数组有四个元素时,它只在最终响应中显示一个元素。我想将数组中的所有元素显示为最终输出。下面是代码,这种方法是否正确?当我将 console.log 放在 membersProcessed++ 下时,我也看到了它首先显示所有 console.log,然后只发送一个输出。如何解决此问题以在 async.eachSeries 完成后将所有数组发送回 Promise。
var members = [];
let createMembers = new Promise((resolve, reject) => {
var membersProcessed = 0;
async.eachSeries(req.body.payLoad, (member, callback) => {
membersProcessed++;
User.find({mobileNumber: member.mobileNumber}, (err, data) => {
if(err) {
reject(err);
} else {
if (data.length == 0) {
member.isMember = true;
} else {
member.isMember = false;
}
members.push(member);
if(membersProcessed < req.body.payLoad.length) {
resolve(members);
} else {
callback();
}
}
});
});
});
createMembers.then((data) => {
res.status(200).send({
message: data
});
}).catch((err) => {
res.status(500).send({
message: err
});
});
电流输出
{
"message": [
{
"mobileNumber": "1234567891",
"firstName": "a",
"lastName": "aa",
"isMember": true
}
]
}
预期的输出应该是
{
"message": [
{
"mobileNumber": "1234567891",
"firstName": "a",
"lastName": "aa",
"isMember": true
},
{
"mobileNumber": "1234567892",
"firstName": "b",
"lastName": "bb",
"isMember": true
},
{
"mobileNumber": "1234567893",
"firstName": "c",
"lastName": "cc",
"isMember": false
}
]
}
【问题讨论】:
标签: node.js mongodb promise es6-promise async.js