即時のコールバックのタイミングに依存しないコード(マイクロタスクとマクロタスクのような)を書く方が良いですが、とりあえず脇に置いておきましょう。
setTimeoutマクロタスクをキューに入れます。マクロタスクは、少なくとも、すべてのマイクロタスク(およびそれらが生成するマイクロタスク)が完了するまで開始を待機します。次に例を示します。
console.log('Macrotask queued');
setTimeout(function() {
console.log('Macrotask running');
});
Promise.resolve()
.then(function() {
console.log('Microtask running');
});
console.log('Microtask queued');
console.log('Last line of script');
行動.then解決の約束には、即時の行動は基本的に異なるsetTimeoutコールバック-約束は.thenしても、最初に実行されるsetTimeout最初のキューに入れられました。ただし、Promiseをサポートしているのは最新のブラウザのみです。どのようにすることができ、特別な場合にはマイクロタスクの機能が適切にpolyfilledことPromiseは存在しないのですか?
.thenを使用してのマイクロsetTimeoutタスクを模倣しようとすると、マイクロタスクではなくマクロタスクがキューイングされるため、.thenマクロタスクがすでにキューに登録されている場合、不適切にポリフィルされたものが適切なタイミングで実行されません。
を使用した解決策がありますMutationObserverが、見た目が醜く、それMutationObserverが目的ではありません。また、MutationObserverIE10以前ではサポートされていません。Promiseをネイティブでサポートしていない環境でマイクロタスクをキューに入れたい場合、より良い代替手段はありますか?
(私は実際にはIE10をサポートしようとしているわけではありません。これは、Promiseなしでマイクロタスクをキューに入れる方法についての理論的な演習です)
schedule.js見てみると啓発されます。