我仍然是async模块的新手。基本上,我想使用async.parallel从数组进行批量更新操作,如下所示:
var _ = require('lodash');
var async = require('async');
var list = req.body.dataArr; //the array
var asyncTasks = [];
_.each(hotelList,function(value,key){
asyncTasks.push(function(callback){
Hotel.find({hotelId:value.hotelId}).exec(function(err,hotels){
if(err){
console.log(err);
}
if(hotels.length ==0){
//hotel not found
console.log('Hotel not found for ID :'+value.hotelId);
return;
}
hotels[0].countryCode = value.countryCode;
hotels[0].city = value.city;
hotels[0].save(function(err){
if(err){
console.log('saving failed ... Reason : '+err);
return;
}
console.log('saving successful');
});
});
});
});
async.parallelLimit(asyncTasks,function(){
//async.parallelLimit(asyncTasks,10, function(){
console.log('finish call asyncTask');
res.json({status:'success'});
});
问题是,当我使用数组中的所有数据(有超过100.000个索引)运行它时,它只停止没有任何消息,因为我等了几分钟,但当我尝试将数组限制为仅使用10 parallelLimit,它只执行10次更新操作:
saving successful
我是如何使用异步的?对不起,如果我的英语不好。
答案 0 :(得分:0)
您的asyncTasks
个函数在完成工作后需要调用callback
个参数,以便parallel
或parallelLimit
知道它们何时完成。
_.each(hotelList,function(value,key){
asyncTasks.push(function(callback){
Hotel.find({hotelId:value.hotelId}).exec(function(err,hotels){
if(err){
console.log(err);
return callback(err);
}
if(hotels.length ==0){
//hotel not found
console.log('Hotel not found for ID :'+value.hotelId);
return callback(Error('Not found'));
}
hotels[0].countryCode = value.countryCode;
hotels[0].city = value.city;
hotels[0].save(function(err){
if(err){
console.log('saving failed ... Reason : '+err);
return callback(err);
}
console.log('saving successful');
callback();
});
});
});
});