// setup function finder(records, cb) { setTimeout(function () { records.push(3, 4); cb(records); }, 500); } function processor(records, cb) { setTimeout(function () { records.push(5, 6); cb(records); }, 500); } async.waterfall([ function(cb){ finder([1, 2], function(records) { cb(null, records) }); }, function(records, cb){ processor(records, function(records) { cb(null, records); }); }, function(records, cb) { alert(records); } ]);