やりたいことはasync/awaitが非同期処理内でしか利用できないので(Promiseを返す関数を作って呼び出すようなことをしないといけない)同期処理中にサクッと埋め込むような記述をしたい。
async/awaitはPromiseを使用しているかつIE11はPromiseが使用できないので、ブラウザ側でIE11に対応する場合は考慮する必要がある。
(async () => { await 非同期関数(); })();
のようにすると同期処理内にasync/awaitを埋め込むことができる。
要するに即時関数を用意して実行している。
具体例
/** 非同期処理 ファイル読み込みや通信処理を想定 0~200ミリ秒で返す */ const promiseMethod = (index: number) => { return new Promise<number>((resolve, { }) => { setTimeout(() => { console.log(index); resolve(index); }, Math.random() * 200); }); } (async () => { let result = 0; for (let index = 0; index < 10; index++) { const retValue = await promiseMethod(index); result += retValue; } console.log(result); })();
以下のように綺麗に逐次実行されて出力される。
0 1 2 3 4 5 6 7 8 9 45