i est votre index vers l'endroit où vous extrayez les données d'entrée dans catalogArray , mais vous essayez également de l'utiliser pour savoir combien ont été enregistrés, ce qui n'est pas possible. Essayez de les suivre séparément comme ceci :
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++;
}
});
MISE À JOUR
Si vous souhaitez ajouter un contrôle de flux plus strict au processus, vous pouvez utiliser le async forEachLimit du module
fonction pour limiter le nombre de save en attente opérations à tout ce que vous spécifiez. Par exemple, pour le limiter à un seul save en attente à la fois :
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');
});
}