2012-08-09 91 views
0

我运行以下代码作为before()的参数,以在我的MongoDB数据库(使用Mongoose)中创建测试条目。但是,这会导致错误,因为done()会被多次调用。但是,如果我不使用done(),那么testPhoto将不会保存到数据库,因为它被切换到后台线程。如何确保循环保存数据库在Mocha完成之前执行?

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); 
    } 
} 

有没有什么办法可以保证done()函数只在所有testPhoto被保存到数据库后才执行一次?

回答

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(); 
     } 
    }); 
    } 
} 
相关问题