Ich habe eine API, von der ich N Seiten mit Daten abfragen muss. Da ich die API nicht überladen möchte, möchte ich dies sequentiell und ohne Blockierung des Hauptthreads tun.
Der Code wäre in etwa so:
var res = []; // all data from api
var totalPages = 10;
var pageSize = 100;
for (let page = 0; page < totalPages; page++) {
// load using jQuery ajax request
$.get('api.php', { page: page, page_size: pageSize }, function(result) {
res.push(...result); // add data to resulting array
});
}
Aber dieser Ansatz hat ein paar Probleme:
res
zu einem anderen Code zurückkehren, der dies benötigt.Gibt es eine Möglichkeit, diese Probleme zu beheben, ohne einige Nebenbibliotheken oder Versprechungen zu verwenden? Einfach nur altes Vanilla-Javascript. Tut mir leid, wenn etwas unklar aussieht, ich bin nicht sehr erfahren in js
Lösung des Problems
Sie können hier eine einfache Rekursion wie folgt verwenden:
var res = []; // all data from api
var totalPages = 10;
var pageSize = 100;
const loader = page => {
// load using jQuery ajax request
$.get('api.php', { page: page, page_size: pageSize }, function(result) {
res.push(...result); // add data to resulting array
if (page < totalPages)
loader(++page)
else
console.log('DONE!');
});
}
loader(0);
Keine Kommentare:
Kommentar veröffentlichen