Na forum 4programmers.net korzystamy z plików cookies. Część z nich jest niezbędna do funkcjonowania
naszego forum, natomiast wykorzystanie pozostałych zależy od Twojej dobrowolnej zgody, którą możesz
wyrazić poniżej. Klikając „Zaakceptuj Wszystkie” zgadzasz się na wykorzystywanie przez nas plików cookies
analitycznych oraz reklamowych, jeżeli nie chcesz udzielić nam swojej zgody kliknij „Tylko niezbędne”.
Możesz także wyrazić swoją zgodę odrębnie dla plików cookies analitycznych lub reklamowych. W tym celu
ustaw odpowiednio pola wyboru i kliknij „Zaakceptuj Zaznaczone”. Więcej informacji o technologii cookie
znajduje się w naszej polityce prywatności.
@szatkus: Czy async nie powodowało właśnie, że funkcja jest wykonywana coś w stylu w tle, że somefunction jest uruchamiane i w czasie jej przetwarzania już wykonuje się następna linijka kodu, a bez async przed function kod wykonuje się linijka po linijce i dopiero po ukończeniu operacji znajdującej się w pierwszej linijce, dopiero przechodzi do drugiej? Wydawało mi się, że to, co mówisz ma miejsce tylko po użyciu then.
Nie, async i await (przy czym awaita możesz używać tylko w async funkcjach - i async sam zwraca promisa) to syntactic sugar, żebyś nie musiał wszędzie mieć zagnieżdżonych Promise.then. Tak na prawdę, z tego i tak powstanie chain Promise.then'ow, ale nie będzie on dla "Ciebie widoczny w kodzie".
Edit: powyższe to odpowiedź do twojego ostatniego pytania. Natomiast do pytania z tematu - setTimeout wykona się po someFunction
Czy async nie powodowało właśnie, że funkcja jest wykonywana coś w stylu w tle, że somefunction jest uruchamiane i w czasie jej przetwarzania już wykonuje się następna linijka kodu, a bez async przed function kod wykonuje się linijka po linijce i dopiero po ukończeniu operacji znajdującej się w pierwszej linijce, dopiero przechodzi do drugiej? Wydawało mi się, że to, co mówisz ma miejsce tylko po użyciu then.
Abstrahując od samego async/await i promisów/then, to przyda się wiedza o tzw. pętli zdarzeń w JS. Generalnie w samym JS kod się wykonuje synchronicznie (czyli linijka po linijce) i jak się wykona wszystko, co się może wykonać synchronicznie, to dopiero silnik za scenami przetwarza rzeczy, które są asynchroniczne (hasło do wyszukania: event loop. A także microtask queue, w którym są obsługiwane promisy) i jak są jakieś zdarzenia/zadania (np. rozwiązane promisy, timeouty, zdarzenia myszy itp.), to znowu odpala się kod JS, ten który widzimy. No i odpala się, aż się wszystko uruchomi co trzeba. I tak w kółko.