1async を付けると Promise に包まれる
async を付けた関数は、return 42 と数値を返しても、呼び出し側には Promise<number> が返ります。instanceof の結果が示すとおり、戻ってくるのは中身ではなく Promise です。前のレッスンで学んだ .then でも受け取れることを確認してください。
TypeScript
2await — Promise から中身を取り出す
await を付けると、Promise<string> から中身の string を取り出せます。取り出した後は普通の文字列なので、連結も length もそのまま使えます。await は async 関数の中でしか書けないため、main 関数を定義して最後に呼ぶのが定番の形です。
TypeScript
3wait 関数 — タイマーを await で待つ
setTimeout を Promise<void> に包んだ wait 関数は、実務でもテストでもよく書く小道具です。await wait(100) の行で実行が一時停止し、100ミリ秒たってから次の行に進みます。「待ってから次へ」という流れが上から下へそのまま読めるのが async/await の利点です。
TypeScript
4直列の await — 前の結果を次に使う
1つ目の await の結果を、2つ目の呼び出しの引数に使う「直列」の形です。ID を調べてから、その ID で詳細を取得する、という依存関係のある API 呼び出しの典型です。.then の入れ子で書くより、データが流れていく順番が一目で追えます。
TypeScript
5並行fetch + await Promise.all
互いに依存しない複数の取得は、Promise.all に渡して await すれば並行で待てます。結果の stockList の各要素は Stock 型と推論されるので、そのままループで使えます。「依存があれば直列 await、なければ Promise.all」が実務での使い分けです。
TypeScript