许多人在此网站上询问如何遍历URL列表并向每个URL发出GET请求。这并不完全符合我的目的,因为我发出GET请求的次数将取决于我从初始API请求中获得的值。
作为我目前所拥有的大致概述:
var total = null;
var curr = 0;
while (total == null || cur < total) {
request.get('https://host.com/skip=' + curr, function(error, response, body) {
var data = JSON.parse(body);
total = data['totalItems'];
curr += data.items.length;
}
}
由于Node.js及其如何使用异步请求,这给了我一个永远的循环,因为total
和cur
始终分别保持为null和0。我不太确定如何重做此操作以使用Promises和回调,有人可以帮忙吗?
答案 0 :(得分:0)
因此,有几种方法可以做到这一点,但是最简单的方法可能只是递归获取结果的函数。
未经测试,但应该在球场上
function fetch(skip, accumulator, cb) {
// do some input sanitization
request.get('https://host.com/skip=' + skip, (err, res, body) => {
// commonly you'd just callback the error, but this is in case you've fetched a number of results already but then got an error.
if(err) return cb(err, accumulator);
var data = JSON.parse(body);
accumulator.total: data['totalItems'];
accumulator.items.concat(data.items);
if(accumulator.items.length === accumulator.total) return cb(null, accumulator);
return fetch(accumulator.items.length, accumulator, cb);
});
}
fetch(0, { items: [] }, console.log);