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