【问题标题】:Callback not getting called while using collection.save() in async foreach loop in node js在节点js的异步foreach循环中使用collection.save()时未调用回调
【发布时间】:2017-09-06 19:00:33
【问题描述】:

我的目标是将记录保存在异步 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() 不应该是这样的。 请指导。

【问题讨论】:

  • 为什么注释掉 save() 中的 callback() 调用?这正是它应该被调用的地方。
  • 我猜,我一直忘记取消注释下面的回调()函数。有效。愚蠢的我。

标签: javascript node.js mongodb foreach


【解决方案1】:

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

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

【讨论】:

  • 它应该在传递给save()的回调中,而不是作为单独的参数传递。
猜你喜欢
  • 2014-10-09
  • 2021-09-11
  • 2020-03-30
  • 2021-07-30
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
相关资源
最近更新 更多