我无法调用循环内MongoDB的回调函数。我提供我的阵列和下面的代码。
[
{
"location": "NEW DELHI",
"nos_of_fos": 15,
"login_id": [
"9619300317",
"9619300343",
"9619300338",
"9619300351",
"9619300322",
"9619300316",
"9619300323",
"9619300328",
"9619300341",
"9619300309",
"9619300310",
"9619300329",
"9619300353",
"9619300356",
"[email protected]"
],
},
{
"location": "North West Delhi",
"nos_of_fos": 6,
"login_id": [
"9619300355"
],
}
]
以上是我的输入数组。
finalOut.forEach(function(listItem, index){
var remarkCount=0;
console.log('items',listItem['login_id']);
listItem['login_id'].forEach(function(item, index1){
Feedback.collection.countDocuments({login_id:item},function(cerr,cdocs){
if (!err) {
if (docs >0) {
console.log('docsinner',cdocs);
remarkCount+=parseInt(cdocs);
}
}
})
})
console.log('docsout',remarkCount);
finalOut[index]['total_remarks']=remarkCount;
})
这里整理的MongoDB检查第一次迭代循环之前得到完成。在这里,我需要通过一个LOGIN_ID价值,只有在完成任务的MongoDB新的计将分配后的一个检查。
finalOut.forEach(function(listItem, index) {
var remarkCount = 0;
var promises = listItem['login_id'].map(function(item, index1) {
return new Promise((resolve, reject) => {
Feedback.collection.countDocuments({ login_id: item }, function(
err,
docs
) {
if (!err) {
if (docs > 0) {
console.log('docsinner', docs);
remarkCount += parseInt(docs);
}
resolve();
}
reject();
});
});
});
Promise.all(promises)
.then(() => {
finalOut[index]['total_remarks'] = remarkCount;
})
.catch(err => {});
});