メモログ

塵が積もって山とならないメモのログ

Top-level await will be soon

asyncawaitの書き方に慣れてくると、非同期の処理を待つ時はいつでもawaitを使いたくなるのだが、使えるのはasyncのついたfunctionの中だけでトップレベルでは使えない。

つまり

1
2
3
const resp = await fetch("./foo.json");
const json = await resp.json();
console.log(json);

みたいにトップレベルで使えない。

1
2
3
4
5
(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上ではもうすぐ使えるのだ。

というメモ。