• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Opoznienie w pobraniu danych sprawia że petla while wykonuje sie w nieskonczonosc

VPS Starter Arubacloud
0 głosów
143 wizyt
pytanie zadane 4 września 2017 w JavaScript przez jankowa1ski Gaduła (3,560 p.)

mam problem z pętla while w javascipt , wygląda mniej więcej tak:
(jest tam tez lądowanie danych z firebase ale nie ma znaczenie)

let f = true;
 
while(f)
{
   pobieram dane z firebase{   // pobieram dla odpowiedniej nazwy---------------------------
   if(dane z firebase === null)    //czyli nie znaleziono z taka nazwa
   {
         stworz rekord o takiej nazwie w firebase
         f=false;
    }
    else{
      nazwa = losujNowoNazwe;  //Tu losuje nowa nazwe bo ta juz jest zajeta
     }
  }//----------------------------------------------koniec funkcji z firebase
}

No i z tego co mi się udało wywnioskować wychodzi na to ze ponieważ pobieranie danych z firebase trwa jakiś czas,  to skrypt tak jakby przechodzi do końca pętli i wykonuje ja od nowa i tak sie wykonuje w nieskończoność bo zawsze jest szybszy od pobrania z firebase. (czyli rowniez zmiany warunku na false)


Nie wiem jak to rozwiązać ale, z pewnością możne się przydać fakt że funkcja zaznaczona przez mnie //------------------- takim komentarzem wykonuje się dopiero po pobraniu danych. Czyli jakbym w tej funkcji sprawdził warunek czy f === true i w jakiś sposób wywołał następne przejście pętli to moim zdaniem by działało.

Także mniej więcej wiem co muszę zrobić ale szczerze mówiąc nie wiem jak....

1 odpowiedź

+1 głos
odpowiedź 4 września 2017 przez ShiroUmizake Nałogowiec (46,300 p.)

Stwórz obiecankę, np za pomocą fetchAPI. Uwaga do IE musisz poly doinstalować.  https://www.npmjs.com/package/fetch-polyfill

Np:

function getData(URL){
let Headers = new Headers();
headers.set('Content-Type', 'application/json');
headers.set('Method','GET');
var request = new Request(URL, headers);
return fetch(request).then(function (response){
        let jsonData = response.json();
        checkFireBase(jsonData);.bind(this)
        });
    
    }
}

Uruchomiłem pewnego rodzaju obiecankę, która mi mówi tyle, jeśli odbierzesz request (mój obiekt fetch), wtedy przekaż do innej funkcji jako strumen danych  a w tej funkcji rozlóz mój obiekt JSON na jakiś typdanych, następnie (dopiero) przekaż do tej twojej funkcji.

To jest jeden możliwych przykładówxd. 

Podobne pytania

0 głosów
1 odpowiedź 1,123 wizyt
pytanie zadane 27 października 2015 w C i C++ przez Melchior Obywatel (1,300 p.)
0 głosów
1 odpowiedź 463 wizyt
pytanie zadane 14 marca 2020 w C i C++ przez Deny Nowicjusz (140 p.)
0 głosów
1 odpowiedź 472 wizyt
pytanie zadane 3 sierpnia 2019 w C i C++ przez Garper Początkujący (360 p.)

92,962 zapytań

141,925 odpowiedzi

321,161 komentarzy

62,296 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...