wurstbrotrest
wurstbrotrest

Reputation: 329

Nesting callbacks for more than two tasks

It is possible to determine the order of TWO tasks using callbacks, as shown below.

a(b);

function a(callback) {
   // do something
   callback();
}

function b() {
   // do next
}

See Fiddle

First do a(), then do b().

I would like to concatenate more than two tasks. As I´m dealing with quite big functions, I´m looking for something like that:

a(b(c));

First do a(), then do b(), then do c(). However I'm not successful with this. See Fiddle

Is there an easy way to do so, maybe without needing Promises?

Upvotes: 0

Views: 37

Answers (1)

Bergi
Bergi

Reputation: 664164

You're calling b immediately, not passing a callback to a. You'll need to use a function expression:

a(function(aResult) {
    b(c);
});

Of course, you can avoid these by returning closures from all your functions:

function a(callback) {
    return function(args) {
        // do something
        if (callback) callback(res);
    };
}
function b(callback) {
    return function(aResult) {
        // do next
        if (callback) callback(res);
    };
}
function c(callback) {
    return function(bResult) {
        // do next
        if (callback) callback(res);
    };
}

which you would call like this:

a(b(c())();

(this is known as pure continuation passing style)

Upvotes: 1

Related Questions