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');
});
}