「1から100まで出力する」のJavaScriptのPromise使った例
追記:冷静になるとこの記事なんか変なので、あとで修正します。参照しないように。
forを使わないループ、簡単な例はみんな思いつくからいいとして、一番ややこしいやつ考えてたんだけど、やっぱり無駄にPromise酷使する例だと思った。
追記:この例はちょっとミスってた。正しいコードを末尾に載せる
# Serialized Sync Promise [1..100] .map (i) -> new Promise (d) -> console.log i; d() .reduce ((l, p) -> l.then p), Promise.resolve()
(function() { _results = []; for (_i = 1; _i <= 100; _i++){ _results.push(_i); } return _results; }).apply(this).map(function(i) { return new Promise(function(d) { console.log(i); return d(); }); }).reduce((function(l, p) { return l.then(p); }), Promise.resolve());
ちゃんと同期実行される。
ちなみに自分はこのコードはd() を呼ぶタイミングで時系列制御が自由自在なので、プロダクションでもよく書く。
追記:正しいコード
# Serialized Sync Promise [1..100] .map (i) -> new Promise (d) -> setTimeout -> console.log i; d() .reduce ((l, p) -> l.then p), Promise.resolve()
やっぱ非同期じゃないとこの例意味が無い