使用async.each()方式时的注意事项
1.eachSeries
用法eachSeries(arr, iterator, callback)
作用类似mapSeries,也是串行执行,唯一不同的是,最后的callback只能收到err/null参数,不会返回每一次iterator的执行结果results.
2.each
用法:each(arr, iterator, callback)
作用与eachSeries类似,最后也只能收到err/null作为反馈,但与eachSeries串行执行不同,each是全部执行并等待全部完成后返回,中间如果有错误就不等全部完成就立即返回。 使用each()方法套each()方法时要注意了,按下面方法对查询的结果分页排序时会出现乱序的问题(也就是.sort()方法应用不上),要使排序生效就要用eachSeries()方法了。
var findPositionsInfo=function(rolename,callback){
var info = [];
var infos = {};//定义一个空的json对象,用来存放过滤的信息
var now_date = new Date();
RoleCategory.model.findOne()
.select('_id name')
.where('name',rolename)
.exec(function(err,result){
if(err){
return callback(err,null);
}else{
//var pattern = new
RegExp(rolename, 'i');
Role.model.find()
//.where('name',pattern)
//.where('name', rolename)
.where('roleCategory',result._id)
//.populate('roleCategory')
.select('name roleCategory')
.exec(function(err,ret){
console.log('按角色过滤岗位方法执行中。。。。'+ret);
if(err){
return callback(err,null);
}else{
**async.each(ret,function(rolenames,next)**{
async.waterfall([
function(callback){
console.log('拿到所有的角色名。。。。1');
//对CareerInCrew进行分页查询
CareerInCrew.paginate({
page: 1,
perPage: 10,
maxPages: 10
})
.select('crews_object role men_count expired_date createdBy')
.where('role',rolenames._id)
.populate('role crews_object createdBy')
**.sort('men_count',1)**
.exec(function(err,rets){
if(err){
return callback(err,[]);
}else{
var role_name = '';
var crews_object = '';
var createdBy = '';
var expired_date = '';
var men_count = '';
//var json = {};
var positionInfoArray = [];
positionInfoArray = rets.results;
if(positionInfoArray == null || positionInfoArray.length == 0) return callback(null, []);
**async.each(positionInfoArray,function**(item,next){
async.waterfall([
function(callback){
console.log('根据角色名找到相应的信息。。。。。2');
role_name = rolenames.name;
crews_object = item.crews_object.name;//剧组名
createdBy = item.createdBy.name;//发布者
expired_date = item._.expired_date.format('YYYY-MM-DD HH:mm:ss');//报名截止日期
men_count = item.men_count;//招募的人员数量
console.log(role_name+" "+crews_object+" "+createdBy+" "+expired_date+" "+men_count);
var result = '{ "_id":"'+rolenames._id+'","role_name":"'+role_name+'","crews_object":"'+crews_object+'","createdBy":"'+createdBy+'","expired_date":"'+expired_date+'","men_count":"'+men_count+'"}';
infos=JSON.parse(result);
//console.log('object?:'+infos+" "+infos.crews_object)
callback(null,infos);
}
],function(err,info_result){
info.push(info_result);
next();
});
},function(err){
if(err){
return callback(err,[]);
}else{
callback(null, info);
}
});
}
});
}
],function(err, arg1){
if(err){
return callback(err,[]);
}else{
next();
}
});
},function(err){
if(err){
return callback(err,[]);
}else{
return callback(null,info);
}
})
}
});
}
});
}