やりたいことは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