NodeJS和Javascript上带有状态变量的异步函数调用

NodeJS和Javascript上带有状态变量的异步函数调用,javascript,node.js,rest,asynchronous,Javascript,Node.js,Rest,Asynchronous,我正在编写一个REST客户机来访问对回复进行分页的REST服务器。我使用Node的HTTPS库编写了如下内容: var nextPage = true, pageNo=0; do { // builds the url options.path = "?page=" + pageNo; var req = HTTPS.request(options, function(res) { res.on('data', function (chunk) { parse

我正在编写一个REST客户机来访问对回复进行分页的REST服务器。我使用Node的HTTPS库编写了如下内容:

var nextPage = true, pageNo=0;

do {
  // builds the url
  options.path = "?page=" + pageNo;

  var req = HTTPS.request(options, function(res) {
    res.on('data', function (chunk) {
      parser(chunk, function(err, result) {
        // do something with result
        if (!("nextPage" in result)) {
          nextPage = false;
        }
      });
    });
  });
  // handle errors and end request

  pageNo++;

} while(nextPage)
这当然不起作用,因为对服务器的请求是异步处理的,nextPage变量永远不会更新,但我无法找到一种使用高阶函数使其工作的方法

我是否应该将请求封装在递归函数中,每次都传递状态?还是有更好的办法

更新1: 你是说像这样的事吗

var nextPage = true, pageNo=0;
var async = require('async');

async.doWhilst ( function () {
  // builds the url
  options.path = "?page=" + pageNo;

  var req = HTTPS.request(options, function(res) {...});

  // handle errors and end request

  pageNo++;

}, function () {return nextPage;}, function () {});

它也不工作,我做错了什么?

将是一个等效的异步迭代器。作为将来的参考,您还需要研究。您希望分页以何种方式工作?我建议您向客户端返回一个延续令牌,客户端可以将其包含在API调用中,让服务器理解并返回相关结果,而不是尝试在一个连续请求中执行分页。我不确定是否理解您的评论。我无法更改服务器API:它返回一个xml格式的资源列表,并对结果进行分页,如果还有更多,则使用nextPage属性。我事先不知道结果的数量或页数,我只需要一直问,直到页面完成。