Я хочу сделать несколько удаленных запросов REST API, где я хочу, чтобы каждый запрос выполнялся последовательно, один за другим. Я читал, что async.js - это способ сделать это.Как асинхронно выполнять несколько запросов API REST в node.js?
Как я не знаю, сколько раз я должен выполнить запрос, я использую async.whilst()
. Идея состоит в том, что я перестану запрашивать, как только API вернет нулевые сообщения. Вот мой код до сих пор (для целей тестирования я ограничил цикл только 5 раз).
var request = require('request');
var async = require('async');
var APIKEY = 'api-key-here';
var i = 0;
var continueWhilst = true;
async.whilst(
function test() { return continueWhilst; },
doThisEveryTime,
function (err) {
// Done
}
);
function doThisEveryTime(next) {
reqURL = 'http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=' + APIKEY + '&offset=' + i*20;
request(
reqURL,
function (err, resp, body) {
if(!err && resp.statusCode == 200) {
var resultAsJSON = JSON.parse(body);
console.log(reqURL);
console.log("Request #" + i + " done");
}
});
i++;
if (i===5) {
continueWhilst = false;
}
console.log("Iterating, i= " + i);
next();
}
Тест выход таков:
Iterating, i= 1
Iterating, i= 2
Iterating, i= 3
Iterating, i= 4
Iterating, i= 5
http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=api-key-here&offset=80
Request #5 done
http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=api-key-here&offset=80
Request #5 done
http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=api-key-here&offset=80
Request #5 done
http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=api-key-here&offset=80
Request #5 done
http://api.tumblr.com/v2/blog/testsite.com/posts/text?api_key=api-key-here&offset=80
Request #5 done
метод request
каким-то образом только с учетом окончательного i
значение 80. Что я сделал не так, и как это исправить?