i
è il tuo indice da cui stai estraendo i dati di input in catalogArray
, ma stai anche cercando di usarlo per tenere traccia di quanti ne sono stati salvati, il che non è possibile. Prova a seguirli separatamente in questo modo:
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++;
}
});
AGGIORNAMENTO
Se desideri aggiungere un controllo del flusso più rigoroso al processo, puoi utilizzare async
forEachLimit
del modulo
funzione per limitare il numero di save
in sospeso operazioni a qualsiasi cosa tu specifichi. Ad esempio, per limitarlo a un save
in sospeso alla volta:
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');
});
}