LoginSignup
0
0

More than 5 years have passed since last update.

ES6のPromiseでPromise.resolve(Promise.resolve(1)).then(fn)を実行するとfnの実引数には1が渡る

Posted at

タイトルの通りなんですが、初め1でfullfillされるPromiseが渡ってくる、と思ってはまりました。MDNのPromise.resolve(value)の説明にもちゃんと書いてありますね。

引数で与えられた値で完了されたPromise オブジェクトを返します。値が成功なら (すなわちthen メソッドを持っている)、返されるプロミスは成功に従い、その最終的な状態を採用します。さもなければ、返されるプロミスはその値で失敗にされます。

new Promise((res) => { new Promise((r) => { r(1); }); })もおそらく一緒で、node4で実行したら1が返りました。

DefinitelyTyped/es6-promise.d.ts だと直和型を使ってPromise<R>型に対して、

then<U>(onFulfilled?: (value: R) => U | Thenable<U>, onRejected?: (error: any) => U | Thenable<U>): Promise<U>;

のように書いてあります。thenの定義を載せましたが、他も同様に直和型です。onFullfilled?Rを受け取ってThenable<U>を返す関数だと、thenが返すインスタンスの型は、Promise<Promise<U>>型ではなく、Promise<U>型なんですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0