回答編集履歴

2

typo

2019/09/20 09:07

投稿

karamarimo
karamarimo

スコア2551

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 に入れられるタイミングはコールバックがセットされたタイミングではなくて、呼び出されほしい、という時です。例えば Promies ならそれが resolve や reject したタイミングです)。
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

修正

2019/09/20 09:07

投稿

karamarimo
karamarimo

スコア2551

test CHANGED
@@ -10,11 +10,11 @@
10
10
 
11
11
 
12
12
 
13
- 注意: `requestAnimationFrame()`のコールバックは[別の場所](https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model:run-the-animation-frame-callbacks-2)で実行されます。
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` が終了した直後、task `setTimeout2` より前に実行されています。
97
+ `await` する値が promise でなくともそれ以降の処理は microtask となり、振る舞いとしては `Promise.resolve()` と同等であることが分かると思います。また、microtask が task より前に実行されていることも観察できます。microtask `promise3` は task `setTimeout1` が終了した直後かつ、task `setTimeout2` より前に実行されています。