timeout-seq.js // node --harmony timeout-seq.js [3,5,10] .map(function(sec) { return sec * 1000; }) .map(function(duration) { return function task(resolve) { setTimeout(function() { console.log(duration); resolve(); }, duration); }; }) .reduce(function(prev, task) { return prev.then(function() { return new Promise(task); }); }, Promise.resolve()) .then(function() { console.log('done'); });