i
là chỉ mục của bạn đến nơi bạn lấy dữ liệu đầu vào trong catalogArray
, nhưng bạn cũng đang cố gắng sử dụng nó để theo dõi số lượng đã được lưu mà điều này không thể thực hiện được. Hãy thử theo dõi chúng một cách riêng biệt như sau:
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++;
}
});
CẬP NHẬT
Nếu bạn muốn thêm kiểm soát luồng chặt chẽ hơn vào quy trình, bạn có thể sử dụng async
của mô-đun forEachLimit
chức năng giới hạn số lượng save
chưa thanh toán hoạt động đối với bất cứ điều gì bạn chỉ định. Ví dụ:để giới hạn nó ở một save
chưa thanh toán tại một thời điểm:
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');
});
}