我試過使用異步。 我有一個async.waterfall的路由功能。 第一個函數調用外部函數並獲取usersData中的所有用戶數據 第二個函數通過async.each調用外部函數爲每個用戶搜索信息。 我想再次傳遞用戶數據與新聞價值第3功能。 在第3個函數中,目前,我有一個async.each,並且我觀察每個用戶的數據。 我的問題新手async.waterfall
1)在第二個函數中,我沒有獲取每個用戶的信息。 2)這是第3函數的第二個被調用之前,我不獲取新數據 感謝
router.post('/launch',function(req,res,next){
async.waterfall([
function(cb){
// fetch the global users
fetchUsers(usersData,cb);
},
function(usersData,cb){
async.each(usersData,
function(userdata,cb){
// fetch other data for each user
calcBalance(userdata, cb);
},function(err){
cb(err,usersData);
});
},
function(usersData,cb){
async.each(usersData,
function(userdata,cb) {
//watch the info with the news data
console.log(' 2 '+ JSON.stringify(userdata));
//console.log(3);
}
);
},
],
function(err,results){
console.log('Fin' + JSON.stringify(results));
res.render('synchros',{launch:'end'},results);
});
res.render('synchros',{launch:'end'});
});
function calcBalance(userData,cb){
var user_id=userData.id,
resultCalcBalance=0,
cats_id=[3,4,6],
tabData={};
async.each(cats_id,function(cat_id,cb){
switch (cat_id) {
case 3:
var comp = "<=";
break;
case 4:
var comp = "<=";
break;
case 6:
var comp = "<";
break;
}// fin du switch
var myquery = "select blabla+
//console.log(calcul_balance);
connectionMysql.query(myquery, function (err, rows, fields,cb) {
if (err) {
console.log('Error ' + err);
cb(err);
}
else if (rows.length != 0) {
if (rows != 0) {
}// end if
else {
}// end else
}); // end connectionMysql
},function(err){
cb(err,userData); // ?? I send the data here
});
cb(null, userData); // ?? I send the data here ??
}
做什麼用從DB回來的數據發生了什麼?另外,請確保'cb'被調用到傳遞給'.query'的回調函數中(現在只有在出現錯誤時它纔會被調用) – lispHK01