Od kilku lat zajmuję się JavaScriptem (Vanilla JS, jQuery, Backbone itp.), A ostatnio pracowałem z Node.js. Trochę czasu zajęło mi zrozumienie programowania „nieblokującego”, ale teraz przyzwyczaiłem się do używania wywołań zwrotnych do operacji we / wy i tak dalej.
Rozumiem, że JavaScript jest z natury jednowątkowy. Rozumiem pojęcie „kolejki zdarzeń” węzła. Nie rozumiem, co decyduje o tym, czy pojedyncza operacja javascript „blokuje”, a „nie blokuje”. Skąd mam wiedzieć, na których operacjach mogę polegać, aby uzyskać dane wyjściowe synchronicznie, aby użyć ich w późniejszym kodzie, a na których muszę przekazać wywołania zwrotne, aby móc przetworzyć dane wyjściowe po zakończeniu operacji początkowej? Czy jest gdzieś lista funkcji JavaScript, które są asynchroniczne / nieblokujące, oraz lista funkcji synchronicznych / blokujących? Co sprawia, że moja aplikacja Javascript nie jest jedną wielką rasą?
Wiem, że operacje, które zajmują dużo czasu, takie jak operacje We / Wy w operacjach Node i AJAX w Internecie, wymagają od nich asynchroniczności i dlatego wymagają wywołań zwrotnych - ale kto określa, co można uznać za „długi czas”? Czy istnieje jakiś wyzwalacz w tych operacjach, który usuwa je z normalnej „kolejki zdarzeń”? Jeśli nie, co odróżnia je od prostych operacji, takich jak przypisywanie wartości do zmiennych lub zapętlanie tablic, od których, jak się wydaje, możemy polegać na zakończeniu synchronicznym?
Być może nawet nie myślę o tym poprawnie - mam nadzieję, że ktoś mnie wyprostuje. Dzięki!