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