i
catalogArray
で入力データを取得する場所へのインデックスです 、しかし、それを使用して、保存された数を追跡しようとしていますが、これは不可能です。次のように個別に追跡してみてください:
var i = 0;
var saved = 0;
Catalog.remove({}, function(err){
while(i < catalogArray.length){
new Catalog(JSON.parse(catalogArray[i])).save(function(err, doc){
saved++;
if(err){
console.log(err);
} else {
if(saved === catalogArray.length) {
return callback('database populated');
}
}
});
i++;
}
});
更新
プロセスに厳密なフロー制御を追加する場合は、async
を使用できます。 モジュールのforEachLimit
未処理のsave
の数を制限する関数 指定したものに対する操作。たとえば、未処理のsave
を1つに制限します 一度に:
Catalog.remove({}, function(err){
async.forEachLimit(catalogArray, 1, function (catalog, cb) {
new Catalog(JSON.parse(catalog)).save(function (err, doc) {
if (err) {
console.log(err);
}
cb(err);
});
}, function (err) {
callback('database populated');
});
}