无法重复使用里面的MongoDB和Node.js的循环asynchrous功能

问题描述 投票:0回答:1

我无法调用循环内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新的计将分配后的一个检查。

node.js mongodb
1个回答
1
投票
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 => {});
});
© www.soinside.com 2019 - 2024. All rights reserved.