async:
async.waterfall([
fn1, fn2, fn3
], function(err, result) {
});
Q: resultP = [ fn1, fn2, fn3 ].reduce(Q.when, void 0);
resultP
.then(function(result) {});
.catch(function(err) {});
If you chain thens in Q, you are not doing it right (imho).