並列で実行したい場合は 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'
実行結果
done 0
done 1
done 2
done 3
finish
Array.prototype.reduceでthenを繋ぐのが肝