var Promise = require('es6-promise').Promise; // idea borrowed from Q.spread Promise.prototype.spread = function(fn) { return this.then(function() { if (!arguments || arguments.length === 0) { return fn.apply(); } return fn.apply(null, arguments[0]); }); }; Array.prototype.promise = function() { return Promise.all(this); }; promptUser([query, newPassword]) .then(function(input) { return [searchForUser(input.query), input.newPassword].promise(); }) .spread(function(result, newPassword) { return updatePassword(result.id, newPassword); }) .then(function() { console.log("Password updated!"); }) .catch(handeError);