2012-08-09 108 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(); 
     } 
    }); 
    } 
} 
相關問題