【问题标题】:How do I make sure a looping save to the database executes before done() in Mocha?如何确保在 Mocha 中的 done() 之前执行循环保存到数据库?
【发布时间】:2012-08-09 05:16:44
【问题描述】:

我正在运行以下代码作为 before() 的参数,以在我的 MongoDB 数据库中创建测试条目(使用 Mongoose)。但是,这会导致错误,因为 done() 被多次调用。但是,如果我不使用 done(),那么 testPhoto 将不会保存到数据库,因为它已被移交给后台线程。

var createFeed = function(done) {
  for (var i = 1; i <= 10; i++) {
    var testPhoto = new Photo({ owner   : 'test' + (i % 2),
                            caption : 'test caption',
                            ratings : [{ _id   : 'test' + (i % 3),
                                        rating : 5 }] });
    testPhoto.save(done);
  }
}

在所有的testPhoto都保存到数据库之后,有什么方法可以保证done()函数只执行一次?

【问题讨论】:

    标签: javascript node.js mongodb callback mocha.js


    【解决方案1】:

    您可以使用async 做一些更正式的事情,或者您可以采用更简单的方法,即只跟踪未完成的保存操作的数量,并在它们全部完成后调用done:

    var createFeed = function(done) {
      var saves = 10;
      for (var i = 1; i <= 10; i++) {
        var testPhoto = new Photo({ owner : 'test' + (i % 2),
                                caption : 'test caption',
                                ratings : [{ _id   : 'test' + (i % 3),
                                            rating : 5 }] });
        testPhoto.save(function(err){
          if (--saves === 0) {
            done();
          }
        });
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 2018-04-14
      • 2016-10-11
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      相关资源
      最近更新 更多