メモログ

Top-level await will be soon

asyncawaitの書き方に慣れてくると、非同期の処理を待つ時はいつでも 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 上ではもうすぐ使えるのだ。

というメモ。

私について

Yutaka Yamaguchi
東京在住。TypeScript, Node.js, Reactなどフロンエンドが主力。Perlも書く。SwiftやRubyも過去には使ってた。過去のTOEIC 860くらい。