我正在编写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 () {});
它也不起作用,我做错了什么?