0

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

4

1 回答 1

4

您可以使用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();
      }
    });
  }
}
于 2012-08-09T05:51:28.993 回答