Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Pobranie wyników API z kilku podstron
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
NetPax
Cześć,

chciałbym pobrać w JS dane z API podzielonego na "n-podstron" (całkowita liczba podstron nieznana/zmienna) tak żeby pokazać wszystko w jednej tabeli.

Myślałem żeby wywołać

fetch('https://api.github.com/orgs/someOrgs/repos?page=0')

w pętli do...while i podstawiać zmienną do ?page=pageCount

i łączyć tablice ale z tego co wiem nie da się w pętli (synchroniczna) wywoływać zapytań asynchronicznych.

Szukałem jakiegoś rozwiązania (Google/Stack) ale jakiegoś konkretnego nie znalazłem. Wywnioskowałem że można użyć Promise.all.

Macie może jakąś podpowiedź/linka?

Pozdrawiam

trueblue
Zapytania w pętli wykonają się po kolei, ale odpowiedzi możesz uzyskać w różnej kolejności.
Otrzymując wynik danej podstrony wstawiaj go po prostu w blok przypisany do niego. Kolejność wtedy nie będzie mieć znaczenia.
NetPax
Hej,

zakodowałem coś takiego. Kod działa i spełnia swoją funkcję ale nie jestem w stanie stwierdzić czy to co on robi jest zaprogramowane w poprawny (optymalny) sposób. Wydaje mi się że nie i trzeba w ogóle inaczej podejść do tego zagadnienia tzn. iterowania po podstronach API JSON.

Moglibyście coś napisać o tym kodzie/podejściu?

  1. componentDidMount() {
  2. var dataUrl = 'https://api.github.com/orgs/angular/members';
  3. fetch(dataUrl)
  4. .then(response => response.headers.get('Link'))
  5. .then(pagesData => {
  6. var parsedPages = parse(pagesData);
  7. var pageIterations = parseInt(parsedPages.last.page, 10);
  8.  
  9. //pętla podstron JSON
  10.  
  11. var allMembersData = [];
  12. for (var i=1; i <= pageIterations; i++) {
  13. var membersUrl = 'https://api.github.com/orgs/angular/members?page='+i;
  14. fetch(membersUrl)
  15. .then(response => response.json())
  16. .then(membersData => {
  17. allMembersData = allMembersData.concat(membersData);
  18. this.setState({
  19. data: allMembersData
  20. });
  21. })
  22.  
  23. } //koniec pętla podstron JSON
  24. })
  25. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.