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