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