Articles

“Promises”と”Async/Await”(新機能付き)の簡単な紹介

promisesはPromiseクラス(コンストラクタ)のインスタンス(オブジェクト)です。 Promiseを作成するには、new Promise(executor)構文を使用し、引数としてexecutor関数を提供します。 このexecutor関数は、約束の解決または拒否の動作を制御する手段を提供します。TypeScriptでは、promiseが満たされたときに返される値のデータ型を提供できます。 Promiseによって返されるエラーは任意の形をとることができるため、promiseが拒否されたときに返される値のデフォルトのデータ型は、TypeScriptによってanyに設定されます。

promiseの解決値の型に注釈を付けるには、ジェネリック型宣言を使用します。 基本的には、約束の解決された値の型を示すPromisenew Promise<Type>()let p: Promise<Type> = new Promise()構文を使用することもできます。

💡ジェネリッククラスについては、ジェネリックスレッスンで詳しく説明しました。div>

(約束。上記の例では、findEvenPromiseコンストラクタを使用して作成されたプロミスです。 このpromiseの解決されたデータ型はnumberなので、TypeScriptコンパイラでは、数値型の値以外の値を持つresolvenumber。promiseの拒否値のデフォルトの型はanyreject関数を呼び出すことは合法です。 これはTypeScriptのデフォルトの動作であり、あなた自身の意見があれば、ここで議論のスレッドを見つけることができます。

成功した約束解決のデータ型としてnumberを提供しているので、TypeScriptコンパイラはvaluenumberthenコールバックメソッド。

thenメソッドで提供されるコールバックは、promiseが解決されたときに実行され、catchメソッドで提供されるコールバックは、promise finallyメソッドは、promiseが解決または拒否されたときに実行されるコールバックを登録します。TypeScriptコンパイラがfinallyメソッドについて文句を言う場合、それはあなたのTypeScriptコンパイラがfinallyメソッドの型定義をイン この方法はES2016で導入されたため、非常に新しい方法です。 このレッスンで使用されるPromise APIの他の機能はかなり新しいので、tsconfig.jsonファイルにすべての新しいライブラリがロードされているこ

(tsconfig。私のtsconfig.jsonES2020標準ライブラリをロードしました。 これにより、ES2020までのすべてのJavaScript機能がサポートされます。 tsconfig.jsonファイルまたは標準ライブラリについての詳細を知りたい場合は、コンパイルレッスン(近日公開)をお読みください。P>

Promise Chaining

thencatchfinallyメソッドは暗黙的にpromiseを返します。 これらのコールバック関数によって返される値は、undefinedを含め、promiseでラップされて返されます。 この暗黙的なpromiseは、失敗する可能性のある新しいpromiseを意図的に返す場合を除き、デフォルトで解決されます。したがって、thencatchfinallythencatchfinallyメソッド。 これらのメソッドのいずれかによって暗黙的なpromiseが返された場合、この暗黙的なpromiseの解決された値の型は戻り値の型になります。 簡単な例を見てみましょう。

(約束連鎖。前の例を変更し、別のthenthenthenstringstringthenvaluestring

約束します。resolve

resolvePromisePromise.resolve(value)呼び出しで指定した値で既に正常に解決されたpromiseを返します。 これは、Promise呼び出しの新しいインスタンスを作成し、promiseをすぐに解決するロジックを追加するよりも簡単です。

(約束解決。上記の結果からわかるように、Promise.resolve(value)呼び出しによって返されたpromiseは、numbervaluePromise.resolve(value)valuevaluevaluevaluevalue

約束します。reject

Promise.resolvePromise.reject(error)erroranyです。

(約束拒否。このpromiseは解決されないため、promise解決値はありません。Promise.rejectメソッドによって返されるpromiseのタイプはPromise<never>です。 したがって、promiseによって解決される値の型はneverneverは発生しない値を意味します。

約束します。すべての

いくつかのシナリオでは、複数の約束を扱っています。 すべての約束が正常に解決されたときにコールバック関数を実行する場合は、Promise.all静的メソッドを使用します。

var pAll = Promise.all()pAll.then( ( ) => {___});

Promise.allメソッドは、promiseの配列(正確に反復可能)を受け取り、新しいpromiseを返します。 返されたpromisepAllは、すべてのpromisep1, p2, ...が正常に解決されると解決されます。 このpromiseは、p1, p2, ...のpromise解決値を含む配列値で、出現順に解決されます。div>

上記の例からわかるように、Promise.allメソッドは汎用であり、提供された各約束によって解決された値の型を取ります。 ジェネリック型を提供することは、上記の結果からわかるように、この集合的な約束の解決された値を使用しているときに非常に役立ちます。

💡Promiseクラスの静的メソッドのほとんどは、以下の例に示すように汎用的です。p>

Promise.allp1, p2, ...pAllが拒否されます。 他の保留中の約束が解決されるのを待たない場合。div>

上記の結果からわかるように、3番目の約束が1秒後に拒否されたため、allPromiseはすぐに拒否されました。

約束します。allSettled

Promise.allSettledPromise.allPromise.allPromise.allSettledcatchブロックを追加しました)。p>

(約束-すべて決済されました。上記のプログラムとその結果からできるように、promise.allSettledallSettlePromiseSettledResult<type>typeは、入力promiseのタイプから派生します。 PromiseSettledResultタイプは以下のようになります。これらの型はTypeScriptの標準ライブラリによって提供されています。 したがって、約束が解決されると、allSettledPromiseFulfilledResultPromiseRejectedResultallSettledPromiseFulfilledResultPromiseRejectedResultインターフェイスの形状を持つオブジェク

PromiseFulfilledResultPromiseFulfilledResultPromiseRejectedResultstatusstatusstatusの判別式として使用することができる。switch/case

ガード。

💡私たちは、タイプシステムのレッスンでswitch/caseタイプガードと識別共用体について話しました。div>

(約束-すべて決済…..ts)

約束します。race

Promise.raceはpromiseの配列(正確に反復可能)を取り、入力promiseのいずれかが解決または拒否されるとすぐに解決または拒否する新しいpromiseを返します。 つまり、Promise.raceによって返されたpromiseは、入力promiseのいずれかの結果で決済され、すぐに決済されます。

(約束レース。ts)

Promise.allPromise.allSettledとは異なり、このメソッドは最初に決済されたpromiseの単一の値のみを返すため、返されるpromiseの型はPromise<number>thenfastestPromiseのコールバックは、解決された約束の値で500ms後に呼び出されます。新しいPromise.any()メソッドがECMAScriptプロポーザルトラックのステージ4に達しました。 Promise.anyPromise.raceAggregateError例外をスローします。