NodeJS-rendre la boucle while synchrone
J'ai un morceau de code suivant
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++;
});
}
J'ai fait ce qui suit, mais il ne récupère rien. Suis-je le faire correctement?
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
);
23
demandé sur
ericbae
2013-04-09 16:42:17
2 réponses
Vous recherchez asynchrone.tandis que(). Cette solution suppose que vous voulez réellement faire chaque requête après l'autre. Comme le mentionne @UpTheCreek ( edit : le commentaire auquel j'ai fait référence a été modifié), il serait probablement possible de le faire de manière asynchrone et de garder une trace de chaque résultat en utilisant 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!
});
22
répondu
Andreas Hultgren
2014-09-04 06:25:23
Avec while
vous obtenez une boucle occupée, qui est contre-but dans le nœud.
Faites-en une fonction récursive à la place. Chaque appel sera effectué dans une coche séparée.
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();
});
}
}());
54
répondu
katspaugh
2013-04-09 13:12:31