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
в даден момент:
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');
});
}