Promiseコンストラクタの型について考えてみる。
code:d.ts
new Promise<T>(executor:FunctionType<T>)
これはlib.es2015.promise.d.tsから引用したものである。
インターフェースPromiseConstructorで定義されていることが確認できる。 このFunctionTypeはなんであるか
code:ts
type FunctionType<T> = (resolve:ResolveFunc<T>,reject:RejectFunc) => void
という関数型である。さらに、Resolve Rejectについても考えよう。 code:ts
type ResolveFunc<T> := (value?:T|PromiseLike<T>) => void
type RejectFunc := (reason?:any) => void
Promiseオブジェクトはthenメソッド,catchメソッドを持っている。 code:ts
//ほんとは第二引数にonRejectedという引数があり、失敗時のコールバック関数をここに登録できる。
then(onfulfilled:SFunction)
type SFunction := ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null
このthenメソッドの引数(コールバック関数)onfulfilled:((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | nullの引数(value:T)を resolve関数の実引数resolve:Tとして、thenメソッドをコールバックする。 reject関数は?
catchメソッドの引数onRejected:((reason: any) => TResult | PromiseLike<TResult>) | undefined | nullの引数(reason:any)をreject関数の引数reason:anyに代入する。