i er dit indeks til hvor du trækker inputdata fra i catalogArray , men du forsøger også at bruge det til at holde styr på, hvor mange der er blevet gemt, hvilket ikke er muligt. Prøv at spore dem separat på denne måde:
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++;
}
});
OPDATERING
Hvis du vil tilføje strammere flowkontrol til processen, kan du bruge async modulets forEachLimit
funktion til at begrænse antallet af udestående save operationer til hvad end du angiver. For eksempel at begrænse den til én udestående save ad gangen:
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');
});
}