我正在运行以下代码作为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()函数仅执行一次?

最佳答案

您可以使用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();
      }
    });
  }
}

关于javascript - 如何确保在Mocha中的done()之前执行对数据库的循环保存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11877194/

10-16 20:58