Я пытаюсь найти хороший шаблон для выполнения нескольких параллельных задач.
Позвольте мне дать определение некоторой задаче. Задачи 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)
выполняется.
Но как я могу сделать больше вещей для множества параллельных задач?