PromiseCapability Record

([[Promise]], [[Resolve]], [[Reject]]) なレコード。 jQuery の Deferred の処理系内部実装のようなもの。

src: https://tc39.es/ecma262/#sec-promisecapability-records

Related Scraps:

NewPromiseCapability

引数: コンストラクタ

返り値: PromiseCapability Record

処理: new して、その際に resolve, reject を取り出して、それらをまとめて capability record へまとめて return

PromiseReaction Record

(PromiseCapability Record, Fulfill or Reject, JobCallback Record or empty) のレコード。

CreateResolvingFunctions

Promise Resolve Function と Promise Reject Function のペアを作成する。それぞれ AlreadyResolved を共有するため、ペアで作成される必要がある。

FulfillPromise

Promise Resolve Function のサブルーチン。 FulfillPromise(promise, value) の形式。

HostEnqueuePromiseJob

enqueueMicroTask の tc39 上での用語。 この enqueue した順番に各 Job は呼び出される必要がある。 (厳密に queue であることが要求される。)

NewPromiseReactionJob

引数: (PromiseReaction Record, value)

以下のように reaction を実行する Job を作成して返す。

PerformPromiseThen

引数: (promise, onfulfill, onreject, resultCapability?)

capability がない場合があり、 await 式の場合が該当する。

Promise.prototype.then

ざっくり、 NewPromiseCapability して PerformPromiseThen (this, arg1, arg2, capability) する。

PromiseResolve

Promise.resolve の処理そのもの。 引数が Promise だったならばそのまま返し、 そうでなければ NewPromiseCapability して、即座に resolve を呼び、その promise を return

thenable

.then のメソッドを持つオブジェクト。 Promise で特殊処理が行われ、 Mongoose のクエリのように、 await したタイミングで実際の非同期を開始させる、みたいなことができるようになる。

Top Level Await

  • モジュールの依存関係は、 DFS で木構造に整理される
    • back reference は無視される
  • 依存先の top level eval が(await 含め)完了してから、依存元が top level eval される