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()関数が1回だけ実行されることを保証する方法はありますか?

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 に答える