Promise#then の中身が非同期となる理由について
azu opened this issue · comments
http://azu.github.io/promises-book/#promise-is-always-async
で書いた内容は事実しか話してないため、何故が書かれてなくて理解が難しい。
- thenで登録する時点でpromiseの状態が決まっていた場合
- プロクラム的にはどちらでも可能
- Promiseの仕様はキューに入れて非同期実行される
- それは何故?
- 一般に状態によって同じ関数が同期、非同期を使い分けるのはおかしい
- そのためPromiseは常に非同期で実行されることを選んだ
これをコラムを超えない範囲でやるの中々難しい。(セクションにした方がいいのかな)
仕様的な解説でやると、結局はそういう仕様だからという事実でしかないので、何故を中心に書いた方がいいと思った。
この辺はライブラリ実装者とかでも混乱してた感じなので、whyの部分はeffective jacascriptから引用するのがよさそう。
Promise.resolve(thenable)
は同期的に実行されるという仕様バグがあったぐらいなので、
あんまり仕様的に深く書くところじゃないきもする。
関連するアンチパターンは ゴーストPromise