使用累积器在while循环内向API请求

时间:2018-08-23 23:26:01

标签: node.js while-loop request

许多人在此网站上询问如何遍历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及其如何使用异步请求,这给了我一个永远的循环,因为totalcur始终分别保持为null和0。我不太确定如何重做此操作以使用Promises和回调,有人可以帮忙吗?

1 个答案:

答案 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);