由于异步请求nodejs

时间:2016-11-03 23:36:06

标签: node.js asynchronous callback request

由于异步请求" tab"是空的

我试图找到一种方法来返回一个非空的标签

的回调(标签)
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);
}

2 个答案:

答案 0 :(得分:0)

这是非常棘手的:你需要跟踪你已经获得了多少响应,并且只有在你拥有它们时才调用回调(tab)。这是实际的簿记工作。

像async这样的库具有此功能 - 例如异步循环。你可以手工完成它,但是它们的方式已经过测试。

答案 1 :(得分:0)

Regular 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)
    }
  );
}