使用异步模块循环数组

时间:2015-03-04 12:44:20

标签: node.js asynchronous

我必须对数据库进行查询,然后对于结果数组中的每个元素,我必须进行另一个查询,然后完成代码。我使用async.waterfall来完成任务,在一个函数中我使用async.forEachSeries来进行循环。

async.waterfall([
    function(callback){
        connection.query(sql, params, function(err, rows, fields){
            if(err) throw err;
            callback(null, rows);
        })
    },
    function(rows, callback){
        var result = [];
        var aux = {};
        for(var i in rows){
            if(typeof aux[rows[i].id] == 'undefined'){
                var obj = {
                    'id': rows[i].id,
                    'title': rows[i].title,
                    'type': rows[i].type,
                    'url': rows[i].url,
                    'last_update': rows[i].last_update,
                    'unixend': rows[i].unixend,
                    'client_id': rows[i].id_client,
                    'client_name': rows[i].client_name,
                    'background_timeline': rows[i].background_timeline,

                    'description': rows[i].description,

                    'init': rows[i].init,
                    'end': rows[i].end,

                    'days': rows[i].days,
                    'timeinit': rows[i].timeinit,
                    'timeend': rows[i].timeend,
                    'lat': rows[i].lat,
                    'lon': rows[i].lon,
                    'url2': rows[i].url2,
                    //'locations': [ ],
                };
                aux[rows[i].id] = obj;
            }


        }
        callback(null, aux, result)
    },
    function(aux, result, callback){
        async.eachSeries(aux,
            function(obj, callback){
                connection.query(sql2, [obj['id'], obj['id'], obj['id']], function(err, data){
                    obj['locations'] = data;
                    callback();
                })
            },
            function(err){  
                if(err) throw err;
                else callback(null, aux, result)
            });
    },
    function(aux, result, callback){
        for(var i in aux){
            result.push(aux[i]);
        }
        callback(null, result);
    }
],
    function(err, result){
        if(err) callback1(err, []);
        else callback1(false, result);
    }
);

这里,callback1是在调用时作为参数传递给全局函数的回调函数。另外,sql和sql2是存储在变量中的查询。

问题是它永远不会进入eachSeries方法。那是为什么?

0 个答案:

没有答案