NodeJS - создание синхронного цикла while
У меня есть следующий фрагмент кода
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++;
});
}
Я сделал следующее, но на самом деле ничего не извлекал. Правильно ли я делаю это?
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
);
Ответы
Ответ 1
Вы ищете async.whilst(). Это решение предполагает, что вы действительно хотите выполнять каждый запрос за другим. Как упоминает @UpTheCreek (редактирование: комментарий, о котором я говорил, был отредактирован), скорее всего, можно будет сделать это асинхронно и отслеживать каждый результат с помощью async.parallel
.
var page = 2,
lastPage = 100;
async.whilst(function () {
return page <= lastPage;
},
function (next) {
request("http://some_json_server.com/data?page=" + page, function (error, response, body) {
if (!error && response.statusCode == 200) {
store_data(body)
}
page++;
next();
});
},
function (err) {
// All things are done!
});
Ответ 2
С while
вы получаете цикл занятости, который является контрцелированным в Node.
Вместо этого сделайте рекурсивную функцию. Каждый вызов будет выполнен отдельным тиком.
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();
});
}
}());