1

I know this sounds stupid, but I can't understand how to use async to handle existing asynchronous functions.

For example, consider some asynchronous function foo(arg1, arg2, ..., argN, callback) defined in some node module. Say I want to use this in async's waterfall(tasks,[callback]) function. How could I possibly do this?

//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
}); 

but I can't do that since callback needs to be called before the end of the function. Help?

1 Answer 1

3

Yup, what you have will work. callback just tells async, "I'm done, go to the next". You can also use async.apply to generate those little wrapper functions automatically:

async.waterfall([
  async.apply(foo, x1, x2, nX) //don't use callback, async will add it,
  someOtherFunction
], function (error, finalResult) {});
Sign up to request clarification or add additional context in comments.

3 Comments

Oh ok that works perfectly! I assumed from the documentation that the callback had to be invoked before the wrapper function ended
Nope, it could be 10 layers deep for all async cares. And if it never gets called at all, async will just wait forever.
Awesome! That does make things easy! Thanks for your time

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.