2016-11-03 75 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