我必须对数据库进行查询,然后对于结果数组中的每个元素,我必须进行另一个查询,然后完成代码。我使用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方法。那是为什么?