2013-08-13 6 views
1

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

Например, рассмотрим некоторую асинхронную функцию foo(arg1, arg2, ..., argN, callback), определенную в некотором модуле узла. Скажем, я хочу использовать это в функции asyncwaterfall(tasks,[callback]). Как я мог это сделать?

//original call 
foo(x1,x2,xN, function goo(err, res) { 
    // do something 
}); 

//using async 
async.waterfall([ 
    function(callback) { 
     foo(x1,x2,...,xN, callback); 
    } 
], function goo(err, res) { 
    // do something 
}); 

, но я не могу этого сделать, так как callback должна быть вызвана до конца функции. Помощь?

ответ

3

Yup, что у вас будет работать. callback просто говорит async: «Я закончил, перейдите к следующему». Вы также можете использовать async.apply для генерации этих небольших функций обертки автоматически:

async.waterfall([ 
    async.apply(foo, x1, x2, nX) //don't use callback, async will add it, 
    someOtherFunction 
], function (error, finalResult) {}); 
+0

О, хорошо, что работает отлично! Я предположил из документации, что «callback» должен был быть вызван до того, как закончилась функция обертки – Colin

+0

Нет, это может быть 10 слоев для всех асинхронных забот. И если это никогда не будет вызвано вообще, async будет просто ждать вечно. –

+0

Удивительный! Это ** делает все проще! Спасибо за ваше время – Colin

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