[Ch4] Promise subclassing / Promiseのキャンセル
Ch4 #5 Promiseのサブクラスの作り方 と UseCase or Libraryについて
- https://github.com/cscott/prfun
- https://github.com/paulmillr/es6-shim/issues/170
- https://github.com/domenic/promises-unwrapping/issues/87
https://gist.github.com/azu/11494644
キャンセル出来るPromiseのサブクラス書いてみたけど、Nativeのpromiseだと上手くいかない。
nativeのpromiseのsubclassは@@create が実装されてないとどうにもできないのかな?(classを使う必要がある)
https://gist.github.com/azu/11497402
delegate version も書いてみた。
ref: Chapter 28. Subclassing Built-ins
あんまりnative promiseの拡張って現実的じゃないのかな?
元から拡張のあるライブラリを使うほうが普通にいいのはわかってるけど、 以下みたいに今あるライブラリがnative promiseを使える場合はそっちを使う見たいな実装やる場合にこういう話になりそうな気がする。 (native promiseをベースにするのはパフォーマンスとか、細かい仕様の対応を投げられるとかがあると根本にあると思うけど)
- https://github.com/cujojs/when/issues/248
class MyPromise extends Promise
と書けるまで待たないとできない感じなのかな。
https://github.com/skaegi/promises-cancel
同じ試み。native promiseだと同じ動いてない感じがする。(Firefox 35、Chrome 36.0.1972.2 canary)
ブラウザの実装自体も Promise.call(this); あたりで挙動が違う気がする…
subclassの実装参考
https://github.com/paulmillr/es6-shim/blob/cc957b039332d3b9aa3b1603841a30b6b19ce7bc/test/promise/subclass.js
現段階だとNative Promiseのサブクラスの作り方がよくわかってない。 (最初のリリースには多分これ含められない)
Service Workerまわりからこの辺の話が進みそう
- https://esdiscuss.org/topic/cancelable-promises
Proposals
cancelのやつをAbortControllerに合わせたほういいのかなー 似てはいるけどAPIが違う