asyncとawaitの書き方に慣れてくると、非同期の処理を待つ時はいつでもawaitを使いたくなるのだが、使えるのはasyncのついたfunctionの中だけでトップレベルでは使えない。
つまり
1 | const resp = await fetch("./foo.json"); |
みたいにトップレベルで使えない。
1 | (async () => { |
みたいにasyncのfunction内ならできる。
だからトップレベルでも使えるようにしようというのがECMAScript proposal: Top-level awaitの話(詳細は読んでない)。Top-level awaitのステージは現在3。ECMAScriptのproposalにはステージの状態があって、ステージについて詳しくは The TC39 Processに書いてある。読んでないけど、まあ、仕様追加一歩手前という感じだと思われる。だがStage 3の提案を見るとStage 3のまま留まるものもあるみたいなので、実際いつ仕様に追加されるかよくわからない。
とにかく、いつ追加されるかはわからないけど、TypeScriptでは3.8でサポートが予定されている(Announcing TypeScript 3.8 Beta)。ので、TypeScript上ではもうすぐ使えるのだ。
というメモ。