NodeJS和Javascript上带有状态变量的异步函数调用
我正在编写一个REST客户机来访问对回复进行分页的REST服务器。我使用Node的HTTPS库编写了如下内容: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
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属性。我事先不知道结果的数量或页数,我只需要一直问,直到页面完成。