O módulo async nodejs: https://github.com/caolan/async fornece 2 métodos semelhantes, async.waterfall
e async.series
.
Qual a diferença entre eles?
javascript
node.js
asynchronous
node-async
Bruce Dou
fonte
fonte
waterfall
nemseries
retorna um valor. Espera-se que qualquer que seja o resultado será usado no parâmetro de retorno de chamada opcional.Ambas as funções passam o valor de retorno, de cada função, para a próxima, então quando feito irá chamar o callback principal, passando seu erro, caso ocorra um erro.
A diferença é que
async.series()
, uma vez terminada a série, passará todos os resultados para o callback principal.async.waterfall()
irá passar para o callback principal apenas o resultado da última função chamada.fonte
async.waterfall()
está lidando com umaction that relies on the previous outcome
.async.series()
é lidar com uma ação que desejasee all the result at the end
fonte
Considero async.waterfall prejudicial, porque é difícil refatorar uma vez escrito e também sujeito a erros, pois se você fornecer mais argumentos, outras funções alteram muito a assinatura.
Eu recomendo altamente
async.autoInject
como uma ótima alternativa, async.waterfall. https://caolan.github.io/async/autoInject.js.htmlSe você optar por usar async.waterfall, recomendo armazenar tudo em um objeto, para que suas funções não precisem alterar o comprimento / assinaturas, assim:
aviso: este é um padrão ruim
não faça da maneira acima. Este é um padrão muito melhor de usar:
assim, você não vai puxar o cabelo tentando ter certeza de que os argumentos da função têm o comprimento correto. A primeira função aceita apenas um arg - callback. Todos os restantes devem aceitar dois argumentos - um valor e um retorno de chamada. Siga o padrão e você permanecerá são!
fonte