回答編集履歴
2
typo
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
非同期に呼び出される関数が蓄えられるキューは2種類あり、task queue と microtask queue です。promise のコールバックと [MutationObserver](https://developer.mozilla.org/ja/docs/Web/API/MutationObserver) のコールバックは microtask queue に入れられ、それ以外の非同期なコールバック(`setTimeout` など)はすべて task queue に入れられます。(queue に入れられるタイミングはコールバックがセットされたタイミングではなくて、呼び出されほしい、という時です。例えば Promie
|
9
|
+
非同期に呼び出される関数が蓄えられるキューは2種類あり、task queue と microtask queue です。promise のコールバックと [MutationObserver](https://developer.mozilla.org/ja/docs/Web/API/MutationObserver) のコールバックは microtask queue に入れられ、それ以外の非同期なコールバック(`setTimeout` など)はすべて task queue に入れられます。(queue に入れられるタイミングはコールバックがセットされたタイミングではなくて、呼び出されほしい、という時です。例えば Promise ならそれが resolve や reject したタイミングです)。
|
10
10
|
|
11
11
|
|
12
12
|
|
1
修正
test
CHANGED
@@ -10,11 +10,11 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
注意: `requestAnimationFrame()`のコールバックは[別の
|
13
|
+
注意: `requestAnimationFrame()`のコールバックは[別のタイミング](https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model:run-the-animation-frame-callbacks-2)で実行されます。
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
あまり細かいことは自分も分かっていませんが、基本的にコールスタックが空になるとすぐに [microtask checkpoint](https://html.spec.whatwg.org/multipage/webappapis.html#perform-a-microtask-checkpoint) というのが実行されて、microtask queue に溜まっている microtask が古い順に**すべて実行されます**。もしその microtask が(例えば `Promise.resolve` などで)即座に別の microtask をエンキューしたとしても、それも含めて microtask queue が空になるまで実行されます。
|
17
|
+
あまり細かいことは自分も分かっていませんが、基本的にコールスタックが空になるとすぐに [microtask checkpoint](https://html.spec.whatwg.org/multipage/webappapis.html#perform-a-microtask-checkpoint) というのが実行されて、microtask queue に溜まっている microtask が古い順に**すべて実行されます**。もしその microtask が(例えば `Promise.resolve().then(...)` などで)即座に別の microtask をエンキューしたとしても、それも含めて microtask queue が空になるまで実行されます。
|
18
18
|
|
19
19
|
|
20
20
|
|
@@ -94,4 +94,4 @@
|
|
94
94
|
|
95
95
|
|
96
96
|
|
97
|
-
`await` する値が promise でなくともそれ以降の処理は microtask となり、振る舞いとしては `Promise.resolve()` と同等であることが分かると思います。また、microtask が task より前に実行されていることも観察できます。microtask `promise3` は task `setTimeout1`
|
97
|
+
`await` する値が promise でなくともそれ以降の処理は microtask となり、振る舞いとしては `Promise.resolve()` と同等であることが分かると思います。また、microtask が task より前に実行されていることも観察できます。microtask `promise3` は task `setTimeout1` が終了した直後かつ、task `setTimeout2` より前に実行されています。
|