Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I've got a following piece of code

var page = 2;
var last_page = 100;
while(page <= last_page) {
  request("http://some_json_server.com/data?page=" + page, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      store_data(body)
    }
    page++;
  });                
}

I've done the following, but it is actually not retrieving anything. Am I doing this correctly?

var page = 2;
var last_page = 100;
while(page <= last_page) {
var async_arr = [];
async_arr.push(
  function(next) {
    request("http://some_api_url?page=" + page, function (error, response, body) {
      if (!error && response.statusCode == 200) {
        store_data(body);
      }
    });
  }
);

async.series(
  async_arr, done
);
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
255 views
Welcome To Ask or Share your Answers For Others

1 Answer

With while you get a busy loop, which is counter-purpose in Node.

Make it a recursive function instead. Each call will be done in a separate tick.

var page = 2;
var last_page = 100;

(function loop() {
    if (page <= last_page) {
        request("/data?page=" + page, function (error, response, body) {
            if (!error && response.statusCode == 200) {
                store_data(body)
            }
            page++;
            loop();
        });
    }
}());

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...