Próbowałem zbadać, jak dokładnie należy pisać funkcje asynchroniczne. Po wielu przeglądach wielu dokumentów nadal nie jest to dla mnie jasne.
Jak pisać funkcje asynchroniczne dla Node? Jak poprawnie zaimplementować obsługę zdarzeń błędów?
Innym sposobem zadania pytania byłoby: Jak powinienem zinterpretować następującą funkcję?
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
Wydaje mi się również, że to pytanie dotyczące SO („Jak utworzyć nieblokującą funkcję asynchroniczną w node.js?”) Jest interesujące. Nie wydaje mi się, że została jeszcze udzielona odpowiedź.
javascript
asynchronous
node.js
Kriem
źródło
źródło
setTimeout
isetInterval
w ulubionej przeglądarce i bawić się z nimi, jak również. Lub wywołania zwrotne Ajax (prawdopodobnie najbliższe doświadczeniu węzła) lub nasłuchiwanie zdarzeń dla rzeczy, które znasz, takich jak zdarzenia kliknięcia i ładowania. Model asynchroniczny istnieje już w przeglądarce i jest dokładnie taki sam w węźle.Odpowiedzi:
Wydaje się, że mylisz asynchroniczne operacje we / wy z funkcjami asynchronicznymi. node.js używa asynchronicznego, nieblokującego IO, ponieważ nieblokujące IO jest lepsze. Najlepszym sposobem, aby to zrozumieć, jest obejrzenie kilku filmów autorstwa Ryana Dahla.
Po prostu napisz zwykłe funkcje, jedyną różnicą jest to, że nie są one wykonywane natychmiast, ale przekazywane jako wywołania zwrotne.
Generalnie API daje wywołanie zwrotne z błędem jako pierwszym argumentem. Na przykład
To powszechny wzór.
Innym powszechnym wzorcem jest
on('error')
. Na przykładEdytować:
Powyższa funkcja wywoływana jako
Drukuje
42
na konsoli asynchronicznie. W szczególnościprocess.nextTick
uruchamia się, gdy aktualny stos wywołań pętli zdarzeń jest pusty. Ten stos wywołań jest pusty poasync_function
iconsole.log(43)
został uruchomiony. Więc drukujemy 43, a następnie 42.Prawdopodobnie powinieneś poczytać o pętli zdarzeń.
źródło
Samo przekazywanie informacji zwrotnych nie wystarczy. Aby funkcja była asynchroniczna, musisz na przykład użyć setimer.
Przykłady: funkcje inne niż asynchroniczne:
Jeśli uruchomisz powyższy przykład, to powinno być dobre, będziesz musiał poczekać, aż te funkcje zakończą się.
Funkcje pseudo wielowątkowe (asynchroniczne):
Ten będzie naprawdę asynchroniczny. Powinno być dobrze napisane przed zakończeniem asynchronizacji.
źródło
Powinieneś obejrzeć to: Node Tuts, odcinek 19 - Asynchroniczne wzorce iteracji
Powinien odpowiedzieć na Twoje pytania.
źródło
Jeśli WIESZ, że funkcja zwraca obietnicę, sugeruję użycie nowych funkcji async / await w JavaScript. Sprawia, że składnia wygląda na synchroniczną, ale działa asynchronicznie. Dodanie
async
słowa kluczowego do funkcji umożliwiaawait
składanie obietnic w tym zakresie:jeśli funkcja nie zwraca obietnicy, zalecam zawinięcie jej w nową obietnicę, którą zdefiniujesz, a następnie rozwiąż dane, które chcesz:
Konkluzja: wykorzystaj siłę obietnic.
źródło
Spróbuj tego, działa to zarówno dla węzła, jak i przeglądarki.
źródło
Mam za dużo godzin na takie zadanie w node.js. Jestem głównie front-endem.
Uważam to za dość ważne, ponieważ wszystkie metody węzłów asynchroniczne obsługują wywołania zwrotne i przekształcają je w Promise, lepiej sobie z tym poradzić.
Chcę tylko pokazać możliwy wynik, bardziej przejrzysty i czytelny. Używając ECMA-6 z async, możesz napisać to w ten sposób.
(undefined || null)
jest rEPL (czytaj pętlowych druku Event) scenariuszy, używając undefined, także pracę.źródło