Я пытаюсь найти хороший шаблон для выполнения нескольких параллельных задач.
Позвольте мне определить некоторую задачу для иллюстрации. Задачи a, b, c, d, e, f, g выполняются как a(function(er, ra){//task a returned, ra is result}), поэтому b - g
Есть также некоторые задачи, которые должны выполняться после выполнения какой-либо задачи, вызывать их ab, bc, abc, bd, bcd, af, fg, означает, что при возврате a и b ab(ra, rb) должен выполняться сразу, а когда b и c, bc(rb, rc) должен быть выполнен сразу, а если a, b, c все возвращено, abc(ra, rb, rc) должен быть выполнен.
В простейшем случае, если есть только a и b, я могу сделать что-то вроде этого:
(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);
});
Как вы можете видеть, a и b выполняются параллельно, и когда оба выполняются, ab(ra, rb) выполните.
Но как я могу делать больше вещей для множества параллельных задач?