文章标题

使用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);
                                }
                            })
                        }   
                    });
                }
        }); 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值