http.get()为异步方法,现在使用async模块同步返回:
routes.get("/XXX", function (req, res) {
var reData = {};
array = [{},{}...{}]
async.forEach(
array,
function (index, cb) {
var url = index.url + "?eid=" + eid
var urlName = index.urlName;
var tempData = '';
http.get(url, function (currentData) {
currentData.on("data", function (chunk) {
tempData += chunk
})
currentData.on("end", function () {
reData[urlName] = tempData//JSON.parse();
cb()
})
})
},
function (err){
if (err) return next(err);
//res.json({
// success: true,
// message: reData
//});
res.render('XXX.html', {
DataBox: reData
})
}
)
})
值得记录的地方是
/*Array 遍历参数
*fun1() 遍历过程中调用方法,其中callFun 为回掉方法
*fun2() 遍历结束使用的方法
*/
async.Fun(Array,fun1(Array[index],callFun){
asyncFunction(){ //get the data
}
},fun2(errr){
//res.render();
})
其中有意思的是callFun
它放在fun1本次确定执行完毕的内容中
eg:
res.on('end',fun(){
callFun()
})
一开始我放错位置,导致返回数据偶然为空。。。