无法使用MongoDB和Node.js在循环内迭代异步函数

时间:2019-01-25 09:34:29

标签: node.js mongodb

我无法在循环内调用mongoDB回调函数。我在下面提供我的数组和代码。

[
    {
        "location": "NEW DELHI",
        "nos_of_fos": 15,
        "login_id": [
            "9619300317",
            "9619300343",
            "9619300338",
            "9619300351",
            "9619300322",
            "9619300316",
            "9619300323",
            "9619300328",
            "9619300341",
            "9619300309",
            "9619300310",
            "9619300329",
            "9619300353",
            "9619300356",
            "NORTH@oditeksolutions.com"
        ],

    },
    {
        "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任务后才分配新计数。

1 个答案:

答案 0 :(得分: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 => {});
});