i
é o seu índice de onde você está puxando os dados de entrada em catalogArray
, mas você também está tentando usá-lo para acompanhar quantos foram salvos, o que não é possível. Tente rastreá-los separadamente assim: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++;
}
});
ATUALIZAÇÃO
Se você deseja adicionar um controle de fluxo mais rígido ao processo, pode usar o
async
módulo forEachLimit
função para limitar o número de save
pendentes operações para o que você especificar. Por exemplo, para limitar a um save
pendente de uma 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');
});
}