0

我正在使用一个名为node-github的 NodeJS 模块,它是Github API的包装器,以获取有关某些用户的一些统计信息,例如他们的关注者:

var getFollowers = function(user, callback) {
  github.user.getFollowers(user, function(err, res) {
    console.log("getFollowers", res.length);
    callback(err, res);
  });
};

...

getFollwers({user: mike}, function(err, followers) {
  if(err) {
    console.log(err);
  }
  else {
    console.log(followers);
  }
});

显然,Github 将调用结果限制为最多 100 个(通过per_page参数),并利用Link 标头让您知道存在“下一页”结果。

我使用的模块提供了几种简单的方法来处理 Link 标头,因此您不需要解析它。基本上,您可以致电github.hasNextPage(res)github.getNextPage(res)res您从原始github.user.getFollowers()电话中收到的回复在哪里)

我正在寻找的是让我的函数返回由所有页面组成的所有结果的正确方法/范式。我涉足了一个递归函数,虽然它有效,但我不禁觉得可能有更好的方法。

如果标准流行起来,这个答案可以作为处理所有未来 Link 标头调用的好方法——不仅仅是 Github 的。

谢谢!

4

1 回答 1

0

最后,求助于递归(记住递归的两大弱点:维护它,并解释它:))。如果有人感兴趣,这是我当前的代码:

var getFollowers = function(callback) {
  var followers = []
  ,  getFollowers = function(error, result) {
      followers = followers.concat(result);
      if(github.hasNextPage(result)) {
        github.getNextPage(result, getFollowers);
      }
      else {
        callback(error, followers);
      }
    };              

  github.user.getFollowers(options, getFollowers);
};

但是,我发现如果你只需要关注者的总数,你可以使用 getLastPage 函数来获取最后一页的关注者数量,然后

total_num_of_followers = num_of_followers_on_last_page + (total_num_of_pages * results_per_page)

于 2012-12-11T21:59:19.980 回答