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

Node JS - dziwne iterowanie

0 głosów
423 wizyt
pytanie zadane 7 marca 2017 w JavaScript przez LCPGM Obywatel (1,550 p.)
edycja 7 marca 2017 przez LCPGM
Witam, mam problem z pętlami w node.js.

O co chodzi?
 Mam 4 pętle, każda kolejna jest w środku tej wcześniej, jednak mimo dobrego ustawiania bracketów,o raz jak myślę - dobrego zapisania pętli nie działa ona tak jak powinna. Pierwsza pętla wykonuje się przed startem pozostałych.

Kod:

http://pastebin.com/HGyMq41r

Z góry dziękuje za pomoc!
komentarz 7 marca 2017 przez LCPGM Obywatel (1,550 p.)
Dodam, że chdozi tylko o kolejność wykonywania rzeczy.

Na chwilę obecną zanim jakakolwiek inna pętla się zacznie to ta u góry wypisuje już 4 razy (czyli jej chwilową długość[ilość ile razy jest iterowana]) "console.log(results.length);", dopiero następnie idą dalsze pętlę.

1 odpowiedź

0 głosów
odpowiedź 7 marca 2017 przez adrian17 Mentor (354,800 p.)
edycja 7 marca 2017 przez adrian17

Pierwsza pętla wykonuje się przed startem pozostałych.
 

Nic w tym dziwnego. JS jest z założenia asynchroniczny - Twoja pierwsza pętla wywołuje się X razy, przygotowuje zapytania SQL, a wewnętrzne funkcje wykonają się, gdy te zapytania zwrócą wyniki..

(BTW, dwa wewnętrzne zapytania pewnie można by połączyć w jedno z JOINem. Ogólnie podział na normalne funkcje by się przydał...)

komentarz 8 marca 2017 przez ScriptyChris Mędrzec (190,190 p.)

JS jest z założenia asynchroniczny

JavaScript jest synchroniczny - asynchroniczność obsługuje środowisko, w jakim działa silnik JS (np. przeglądarka). Obsłużone przez środowisko funkcje oraz zapytania asynchroniczne lądują w event loop skąd są przetwarzane przez JS, dopiero gdy w danym czasie nie wykonuje on żadnych synchronicznych działań (czyli jego call stack jest pusty).

http://www.2ality.com/2014/09/es6-promises-foundations.html#the_browser_event_loop

Chyba, że w node.js działa to inaczej.

komentarz 8 marca 2017 przez adrian17 Mentor (354,800 p.)
Przeinterpretowałeś. Nie mówię o wewnętrznej implementacji silnika, tylko ogólnym stylu programowania - API do zapytań HTTP, bazodanowych, czytania plików etc są z założenia asynchroniczne, czy to przez callback, promise czy składnię async/await.
komentarz 8 marca 2017 przez LCPGM Obywatel (1,550 p.)
Trochę posiedziałem, poprobowalem i ciagle to samo. Próbowałem używać funkcji on, oddzielnych funkcji i masy innych rzeczy. Mógłby ktoś powiedzieć dokładniej (nie tyle co podawać gotyowy kod, lecz nakierować) jak rozwiązać mój problem, czego użyć etc. Za pomoc dziękuje!
komentarz 8 marca 2017 przez adrian17 Mentor (354,800 p.)

To nie jest bezpośrednio problem, bo to ma tak działać. Lepiej powiedz co w ogóle chcesz zrobić, bo bez tego nie ma czego radzić.

komentarz 8 marca 2017 przez LCPGM Obywatel (1,550 p.)
Chce aby dla każdego rekordu z "team = winner", iterowalo przez "team = losser", następnie przez wszystkie w tym iterowalo przez wszystkie "returns ", a na koniec przez prices. W rubym wystarczyło umieścić iteracje w iteracji, lecz jak napisałeś wyżej JS działa inaczej.
komentarz 8 marca 2017 przez adrian17 Mentor (354,800 p.)
No i dokładnie to robi, z dokładnością do kolejności. Ideologicznie zazwyczaj nie ma potrzeby żeby robić "następnie", bo czekanie na wynik to marnowanie czasu.

Ale jeśli chcesz coś zrobić "po tym jak wszystkie callbacki się zakończą", to możesz zajrzeć tu http://stackoverflow.com/a/18983245
komentarz 8 marca 2017 przez LCPGM Obywatel (1,550 p.)
Zainstalowałem asynca i z nim sobię poradziłem. Wielkie dzięki za pomoc!

Podobne pytania

0 głosów
0 odpowiedzi 159 wizyt
pytanie zadane 13 kwietnia 2016 w Inne języki przez michcio Nowicjusz (120 p.)
0 głosów
1 odpowiedź 612 wizyt
pytanie zadane 18 lutego 2024 w JavaScript przez Piotrek2713 Mądrala (5,520 p.)
0 głosów
1 odpowiedź 595 wizyt
pytanie zadane 23 stycznia 2023 w JavaScript przez MacieKap Bywalec (2,400 p.)

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 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

Kursy INF.02 i INF.03
...