我正在运行以下代码作为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()函数只执行一次?
答案 0 :(得分: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();
}
});
}
}