Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 由于异步请求节点,回调返回null_Node.js_Asynchronous_Callback_Request - Fatal编程技术网

Node.js 由于异步请求节点,回调返回null

Node.js 由于异步请求节点,回调返回null,node.js,asynchronous,callback,request,Node.js,Asynchronous,Callback,Request,由于异步请求,“选项卡”为空 我试图找到一种方法返回一个标签不为空的回调(标签) 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)

由于异步请求,“选项卡”为空

我试图找到一种方法返回一个标签不为空的回调(标签)

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);
}
函数getUserEvents(回调){ var选项卡=[];
对于(var i=0;i来说,这是一个相当棘手的问题:你需要跟踪你得到了多少响应,只有当你得到所有响应时才调用callback(tab)。这是实际的簿记工作


像async这样的库有用于此的函数——例如,一个异步循环。您可以手动完成,但它们的方式已经过测试。

常规for循环不适用于这样的异步调用。您需要使用一些东西,例如async.while(),来控制async request()调用的流程。下面是修订后的代码(不要忘记安装异步模块):

var async=require('async');
函数getUserEvents(回调){
var选项卡=[];
var i=0;
异步的(
函数(){return i<100;},
功能(cb){
请求(“mysite/list”页=“+i,函数(err,res,body){
如果(!err&&res.statusCode==200){
tab.push(JSON.parse(body));
}
i++;
cb();
});
},
功能(err){
//完成处理第0-99页
回调(选项卡)
}
);
}  
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)
    }
  );
}