i
är ditt index dit du hämtar indata från i catalogArray
, men du försöker också använda den för att hålla reda på hur många som har sparats, vilket inte är möjligt. Försök att spåra dem separat så här:
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++;
}
});
UPPDATERA
Om du vill lägga till stramare flödeskontroll till processen kan du använda async
modulens forEachLimit
funktion för att begränsa antalet utestående save
operationer till vad du än anger. Till exempel för att begränsa det till en utestående save
åt gången:
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');
});
}