Ich habe einen folgenden 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++;
});
}
Ich habe folgendes getan, aber es wird tatsächlich nichts abgerufen. Mache ich das richtig?
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
);
Sie suchen nach async.whilst () . Bei dieser Lösung wird davon ausgegangen, dass Sie tatsächlich jede Anforderung nach der anderen ausführen möchten. Wie @UpTheCreek erwähnt (edit: Der Kommentar, auf den ich mich bezogen habe, wurde bearbeitet), wäre es wahrscheinlich möglich, dies asynchron durchzuführen und jedes Ergebnis mithilfe von async.parallel
zu verfolgen.
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!
});
Mit while
erhalten Sie eine ausgelastete Schleife, die in Node einem bestimmten Zweck dient.
Machen Sie stattdessen eine rekursive Funktion. Jeder Anruf wird in einem separaten Häkchen durchgeführt.
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();
});
}
}());
Sie können Ihre While-Schleife auch asynchron einwickeln und brechen, nachdem Ihr Versprechen gelöst wurde/Bedingungen erfüllt wurden ...
const request = require("request")
;(async()=>{
let results = []
while(true){
await new Promise(resolve => {
request('http://www.seanbehan.com/', (err, resp, body)=>{
console.log(new Date, 'Downloading..')
results.Push(body)
resolve(body)
})
})
if(results.length >= 5){
break
}
}
console.log(results)
})()