2016-11-03 108 views
-1

因爲異步請求「標籤」是空的回調返回NULL的NodeJS

我試圖找到一種方法來與不空

function getUserEvents(callback){ 

    var tab = []; 
    for(var i=0; i<100 ;i++){ //page system 

    request("mysite/list?page="+i, function (err, res, body) { 
     if (!err && res.statusCode == 200) { 

     tab.push(JSON.parse(body)); 

     } 
    }); 

    } 
    callback(tab); 
} 

回答

0

這一個標籤返回的回調(片)是合法的棘手:你需要跟蹤你有多少響應,並且只有在你擁有全部響應時才調用回調(tab)。這是真正的簿記工作。

像async這樣的庫有這個功能 - 例如異步循環。你可以手工做,但他們的方式是測試。

0

Regular for for循環不適用於那樣的異步調用。你需要使用async.whilst()等東西來控制異步request()調用的流程。這裏是修改的代碼(不要忘記安裝異步模塊):

var async = require('async'); 
function getUserEvents(callback){ 
    var tab = []; 
    var i = 0; 

    async.whilst(
    function() { return i < 100; }, 
    function(cb) { 
     request("mysite/list?page="+i, function (err, res, body) { 
     if (!err && res.statusCode == 200) { 
      tab.push(JSON.parse(body)); 
     } 
     i++; 
     cb(); 
     }); 
    }, 
    function (err) { 
     // finish processing pages 0-99 
     callback(tab) 
    } 
); 
} 
+1

謝謝它的工作原理 – Rayan