i
es su índice de donde está extrayendo datos de entrada en catalogArray
, pero también está tratando de usarlo para realizar un seguimiento de cuántos se han guardado, lo cual no es posible. Intenta rastrearlos por separado de esta manera:
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++;
}
});
ACTUALIZAR
Si desea agregar un control de flujo más estricto al proceso, puede usar async
forEachLimit
del módulo
función para limitar el número de save
pendientes operaciones a lo que usted especifique. Por ejemplo, para limitarlo a un save
pendiente a la vez:
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');
});
}