await

async 関数の呼び出しに伴い作成される asyncContext に対する操作がセットになっている。

src: https://tc39.es/ecma262/#sec-runtime-semantics-evaluateasyncfunctionbody

async 関数の実行においては、

  1. NewPromiseCapability
  2. asyncContext を現在の running context のコピーとして作成した後、以下が行われるように修正を加える
    • asyncBody の実行が完了した際に以下を行う。
      • asyncContext の pop
      • asyncBody の結果を適切に PromiseCapability に反映
  3. asyncContext を running context に push 実行
  4. (await か、 2 の終了処理によって running context が(いったん)ここに戻ってきている状態で) return promise

src: https://tc39.es/ecma262/#await

  1. await 引数を PromiseResolve
  2. asyncContext を再度 push するような closure を作成して、1 の結果に PerformPromiseThen する。
    • resultCapability は使わない
    • asyncContext が再開した際には、 1 の結果が await 式の結果として再開するように調整。
  3. asyncContext を pop