2015-06-24 3 views
0

Я хочу многократно выполнять набор асинхронных задач в цикле. Я попытался с помощью водопада подхода async библиотеки, чтобы сделать что-то вродеКак выполнить набор задач async в nodejs в цикле?

while(somethingIsTrue) { 
    async.waterfall([ 
     function(callback) { ... }, 
     function(callback) { ... }, 

    ], function(err) { 
     ... 
     } 
    ); 
} 

Проблемы я столкнулся в том, что первая функция асинхронной никогда не была запланирована или, вернее, и цикл продолжал бежать, очевидно потому, что петля техник его подводят ожидания для завершения асинхронных функций. Я не так хорошо разбираюсь в асинхронном программировании, и мне нужна помощь, чтобы придумать какой-то шаблон для решения этой проблемы.

ответ

1

Попробуйте полу-рекурсивное решение таких как

function again_and_again(callback) { 
    if (!somethingIsTrue) return; 
    async.waterfall([ 
     function(callback) { ... }, 
     function(callback) { ... }, 
    ], function(err, result) { 
     if (err) return callback(err); 
     again_and_again(callback); 
    }); 
} 

Идея заключается в том, чтобы ждать водопада, чтобы закончить, и прийти на обратный вызов, и повторите «петлю» там, вызвав again_and_again снова.

+1

Альтернативно, ['asynC# whilst'] (https://github.com/caolan/async#whilsttest-fn-callback) также может быть полезным. – robertklep

Смежные вопросы