Nodejs convert expensive synchronous tasks to async series

In nodejs I have an expensive function such as:

function expensiveCode(){
  a.doExensiveOperation(1);
  b.doAnotherExensiveOperation(2);
  c.doADiffererentExensiveOperation(3);
  d.doExensiveOperation(4);
}

Such that each sub-function call has different parameters and therefore can't be done in a loop. I'd like to throttle this expensive function call so that each sub-call is done on nextTick such as:

function expensiveCode(){
    process.nextTick(function(){
        a.doExensiveOperation(1);
        process.nextTick(function(){
            b.doAnotherExensiveOperation(2);
            process.nextTick(function(){
                c.doADiffererentExensiveOperation(3);
                process.nextTick(function(){
                  d.doExensiveOperation(4);                 
                });
            });
        });
    });
}

That's obviously ugly, and if there are 20 lines of different operations will too hideous to even consider.

I've reviewed a number of libraries like "async.js" but they all appear to be expecting the called functions to be async - to have a callback function on completion. I need a simple way to do it without converting all my code to the 'callback when done' method which seems like overkill.

Sorry to burst your bubble, but async.waterfall or perhaps async.series combined with async.apply is what you want, and yes you'll need to make those operations async. I find it hard to believe you have found 20 different computationally-intense operations, none of which do any IO whatsoever. Check out the bcrypt library for an example of how to offer both synchronous and asynchronous versions of a CPU-intensive call. Converting your code to callback on completion isn't overkill, it's node. That's the rule in node. Either your function does no IO and completes quickly or you make it async with a callback. End of options.