i
adalah indeks Anda ke tempat Anda mengambil data input di catalogArray
, tetapi Anda juga mencoba menggunakannya untuk melacak berapa banyak yang telah disimpan yang tidak mungkin. Coba lacak mereka secara terpisah seperti ini:
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++;
}
});
PERBARUI
Jika Anda ingin menambahkan kontrol aliran yang lebih ketat ke proses, Anda dapat menggunakan async
forEachLimit
modul
berfungsi untuk membatasi jumlah save
outstanding operasi untuk apa pun yang Anda tentukan. Misalnya, untuk membatasinya menjadi satu save
outstanding sekaligus:
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');
});
}