nodejs patrón de diseño de devolución de llamada paralela
Estoy tratando de encontrar un buen patrón para ejecutar un montón de tareas paralelas.
Permítame definir alguna tarea para ejemplificar. Tareasa, b, c, d, e, f, g
ejecutar comoa(function(er, ra){//task a returned, ra is result})
, también lo haceb
ag
También hay algunas tareas que deben ejecutarse después de realizar alguna tarea, llamémoslasab, bc, abc, bd, bcd, af, fg
, significa cuandoa
yb
ha regresadoab(ra, rb)
debe ejecutarse de una vez, y cuandob
yc
devuelto,bc(rb, rc)
debe ejecutarse de una vez, y sia
, b
, c
todo regresó,abc(ra, rb, rc)
debe ejecutarse.
Para el caso más simple, si solo haya
yb
, Puedo hacer algo como esto:
(function(cb){
var count = 2, _ra, _rb;
function update(){if(--count == 0) cb(null, _ra, _rb)}
a(function(er, ra){_ra = ra; update()});
b(function(er, ra){_rb = rb; update()});
})(function(er, ra, rb){
ab(ra, rb);
});
Como puedes ver,a
yb
ejecutar en paralelo, y cuando ambos están hechos,ab(ra, rb)
ejecutar.
¿Pero cómo puedo hacer más cosas para muchas tareas paralelas?