Moduł async nodejs: https://github.com/caolan/async udostępnia 2 podobne metody, async.waterfall
a async.series
.
Jaka jest różnica między nimi?
javascript
node.js
asynchronous
node-async
Bruce Dou
źródło
źródło
waterfall
ani nieseries
zwraca wartości. Oczekuje się, że niezależnie od wyniku zostanie użyty w opcjonalnym parametrze wywołania zwrotnego.Obie funkcje przekazują wartość zwracaną przez każdą funkcję do następnej, a po wykonaniu wywołania wywołania głównego, przekazując jego błąd, jeśli wystąpi błąd.
Różnica polega na tym
async.series()
, że po zakończeniu serii wszystkie wyniki zostaną przekazane do głównego wywołania zwrotnego.async.waterfall()
przekaże do głównego wywołania zwrotnego tylko wynik ostatniej wywołanej funkcji.źródło
async.waterfall()
ma do czynienia zaction that relies on the previous outcome
.async.series()
ma do czynienia z działaniem, które chcesee all the result at the end
źródło
Uważam, że async.waterfall jest szkodliwy, ponieważ po napisaniu ciężko jest refaktoryzować, a także jest podatny na błędy, ponieważ jeśli podasz więcej argumentów, inne funkcje znacznie zmieniają sygnaturę.
Gorąco polecam
async.autoInject
jako świetną alternatywę dla async.waterfall. https://caolan.github.io/async/autoInject.js.htmlJeśli zdecydujesz się użyć async.waterfall, zalecam przechowywanie wszystkiego w jednym obiekcie, aby Twoje funkcje nie musiały zmieniać długości / podpisów, na przykład:
ostrzeżenie: to zły wzór
nie rób tego w powyższy sposób. Jest to znacznie lepszy wzorzec w użyciu:
w ten sposób nie będziesz wyrywać włosów, próbując upewnić się, że argumenty funkcji mają odpowiednią długość. Pierwsza funkcja akceptuje tylko jeden argument - callback. Wszystkie pozostałe powinny przyjmować dwa argumenty - wartość i callback. Trzymaj się wzoru, a pozostaniesz przy zdrowych zmysłach!
źródło