i
je váš index místa, odkud stahujete vstupní data v catalogArray
, ale také se jej pokoušíte použít ke sledování toho, kolik jich bylo uloženo, což není možné. Zkuste je sledovat samostatně takto:
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++;
}
});
AKTUALIZACE
Pokud chcete do procesu přidat přísnější řízení toku, můžete použít async
forEachLimit
modulu
funkce k omezení počtu zbývajících save
operace podle toho, co určíte. Chcete-li to například omezit na jedno zbývající save
najednou:
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');
});
}