i jest twoim indeksem do miejsca, z którego pobierasz dane wejściowe w catalogArray , ale próbujesz również użyć go do śledzenia liczby zapisanych, co nie jest możliwe. Spróbuj śledzić je osobno w ten sposób:
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++;
}
});
AKTUALIZUJ
Jeśli chcesz dodać ściślejszą kontrolę przepływu do procesu, możesz użyć async forEachLimit
funkcja ograniczająca liczbę zaległych save operacje na cokolwiek określisz. Na przykład, aby ograniczyć go do jednego zaległego save na raz:
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');
});
}