並列で実行したい場合は Promise.all([promise...]) すれば事足りるんだけど、直列で実行しようとするとちょっとややこしい。 # 実行すると1秒後に実行回数をprintするPromise化された関数 cnt = 0 f = -> new Promise (done) -> setTimeout (-> console.log 'done', cnt++ done() ), 1000 # fを直列に4回実行する promises = [f, f, f, f] seq = promises.reduce ((ret, p) -> ret.then p ), promises.shift()() seq.then => console.log 'finish'