asyncとawaitの書き方に慣れてくると、非同期の処理を待つ時はいつでも await を使いたくなるのだが、使えるのは async のついた function の中だけでトップレベルでは使えない。
つまり
const resp = await fetch("./foo.json");
const json = await resp.json();
console.log(json);
みたいにトップレベルで使えない。
(async () => {
const resp = await fetch("./foo.json");
const json = await resp.json();
console.log(json);
})();
みたいに 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 上ではもうすぐ使えるのだ。
というメモ。