generated at
Promise
概説
js
let r:Promise<T> = new Promise<T>((resolve,reject) => { //ここに記述される処理Aは、この変数r定義の後にある処理B,処理Dと並行して行われる。 //つまり、処理Aは非同期処理である。 /* 処理A */ //非同期処理が完了したらこの関数を呼び出す resolve(result); //エラー時はこの様に返す reject(); } /* 処理B */ r.then(function onFulfilled(value) {/* 処理C */}[,onRejected] //onfulfilled関数は非同期処理が成功したときに呼び出されるコールバック関数 //処理Aが終了した後に実行してほしい処理Cをonfulfilled関数に定義できる。 ), .catch(function onrejected{ /* 失敗したときの処理D */}) /**



Promise オブジェクトの解決について復習する。
Promiseコンストラクタに渡された関数の実行状況によって名前を分類することが出来る。
Settled でない状態
Pending
引数として渡した関数 executor が処理中の状態
Settled である状態
つまり、今後変化しないとされる状態
Fulfilled
処理が成功した状態
resolve 関数を呼び出した状態。
then メソッドの引数 onfulfilled コールバック関数が呼び出される状況
Promise.resolve 静的メソッドでこの状態のオブジェクトを生成できる。
Rejected
処理が失敗した状態
reject 関数を呼び出した状態。
then , catch メソッドの引数 onrejected コールバック関数が呼び出される状況
Promise.reject 静的メソッドでこの状態のオブジェクトを生成できる。

Promise.race<T1,T2,T3,...>(promise:Promise[])
全ての渡された Promise (非同期処理)を並行に実行するPromiseオブジェクトを返す。
最初に Settled になった Promise の状態がそのまま反映される。
タイムアウトなどはこれで表現できる。
一方は一定時間後に rejected になるPromise、そのもう一方で通信処理などを行うPromiseを渡す。
一定時間内に処理が完成すれば fulfilled
一定時間を超えれば rejected
Promise.all<T1,T2,T3,...>(promise:Promise[])
こちらは全ての渡された Promise (非同期処理)を並行に実行するPromiseオブジェクトを返す。
これ自体を Promise として、上の状態のうちのどれかを持っているとして考えられる。
全て Settled するまでこれ自体も Settled にならない。
渡された Promise の内、一つでも Rejected の状態のものがあれば全て Settled になった地点で Rejected になる。
型定義を見ていると…結構強引な定義のされ方をしている。
9個までが望ましいらしい。

async , await って?<ES2017>
async 関数では、書かれた関数の処理を非同期処理として行う
無事に return されればその値を resolve 関数の引数とした fulfilled
その中でエラーが起これば rejected となるような
Promiseオブジェクトを戻り値とする。
await 式はそんな関数の中で使える。
await の右辺にあるPromiseオブジェクトが Settled となるまで、その非同期処理を停止する。
この式の評価値は
resolved 時は resolve 関数に渡された引数の値
rejected 時はエラーを投げる( new Error )。
つまり、 try...catch 構文で捉えることが出来る!