async.waterfall([ function1, // returns Thing1 (function () { return function (Thing1) { function2(Thing1, Obj1, Obj2, Obj3); }; }()), // uses Thing1 to create Thing2 but also requires a lot of other parameters to be passed to it. ], function (err, result) { if (err) { console.log('barf') } res.json(201, { thing1 : result.thing1, thing2 : result.thing2 }) } )