node--async--http.get()

async module 使用

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()
    })

一開始我放錯位置,導致返回數據偶然爲空。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章