在节点js中的异步foreach循环中使用collection.save()时,不会调用回调

时间:2017-04-11 11:50:53

标签: javascript node.js mongodb foreach

我的目标是将记录保存在异步foreach循环中的mongoDB集合中。以下代码说明了自己。

async.forEach(data, function(item, callback) {
      var object = new Collection_Object();

      // errorLog.push(sdb);
      object.save(function(error) {
        count++;
        console.log(count);
        if(error) {
          console.log("inside error");
          count--;
        }
        //callback();
      });
      callback();
    }, function() {
    //This is the block which should be called after foreach. 
      res.json(data);
  });

现在发生的事情是流程跳过save部分并直接跳转到应在forEach之后调用的块。

如果我正在评论save部分,正如预期的那样,回调功能正常。 我不知道我在哪里做错了。可能collection.save()不是假设是这样的。 请指导。

1 个答案:

答案 0 :(得分:1)

object.save()也是异步的,所以你必须使用带有save方法的回调函数,例如:

object.save(function(error) {
        count++;
        console.log(count);
        if(error) {
          console.log("inside error");
          count--;
        }
        callback();
      });