El módulo asíncrono de nodejs: https://github.com/caolan/async proporciona 2 métodos similares async.waterfall
y async.series
.
¿Cuál es la diferencia entre ellos?
javascript
node.js
asynchronous
node-async
Bruce Dou
fuente
fuente
waterfall
niseries
devuelve un valor. Se espera que sea cual sea el resultado, se utilizará en el parámetro de devolución de llamada opcional.Ambas funciones pasan el valor de retorno, de cada función a la siguiente, luego, cuando termine, llamará a la devolución de llamada principal, pasando su error, si ocurre un error.
La diferencia es que
async.series()
, una vez finalizada la serie, se pasarán todos los resultados al callback principal.async.waterfall()
pasará a la devolución de llamada principal solo el resultado de la última función llamada.fuente
async.waterfall()
está tratando con unaction that relies on the previous outcome
.async.series()
se trata de una acción que quieresee all the result at the end
fuente
Considero que async.waterfall es dañino, porque es difícil de refactorizar una vez escrito y también es propenso a errores, ya que si proporciona más argumentos, otras funciones cambian mucho la firma.
Recomiendo encarecidamente
async.autoInject
como una gran alternativa, async.waterfall. https://caolan.github.io/async/autoInject.js.htmlSi elige usar async.waterfall, le recomiendo almacenar todo en un objeto, para que sus funciones no tengan que cambiar la longitud / firmas, así:
advertencia: este es un mal patrón
no lo hagas de la forma anterior. Este es un patrón mucho mejor para usar:
de esa manera no se arrancará los pelos tratando de asegurarse de que los argumentos de la función tengan la longitud correcta. La primera función solo acepta un argumento de devolución de llamada. Todos los restantes deben aceptar dos argumentos: un valor y una devolución de llamada. ¡Apégate al patrón y permanecerás cuerdo!
fuente