"use strict"; var Q = require("q"); // Worker function function logAndIncrement(val) { console.log(val); return val + 1; } // Normal Q(0) .then(function(v) { return Q(logAndIncrement(v)); }) .then(function(v) { return Q(logAndIncrement(v)); }) .then(function(v) { console.log(v); }); // Slightly modified from https://github.com/kriskowal/q#sequences function Qsequence(initialValue, promises) { var result = Q(initialValue); promises.forEach(function(r) { result = result.then(r); }); return result; } // With Qsequence Qsequence(0, [ function(v) { return Q(logAndIncrement(v)); }, function(v) { return Q(logAndIncrement(v)); }, function(v) { console.log(v); } ]);