Promise.then
以前は、 (MutationObserver
ブラウザ環境の API。DOM の変更を監視するために使用されます)、async/await
( process.nextTick
Node.js によってのみサポートされており、本質的にはイベント ループの一部ではありません) など、カスタム マイクロタスクを作成するためにあらゆる手段を試みました。
偶然にも、ブラウザには実際にマイクロタスクを生成する方法があることを発見しました。
これはネイティブのqueueMicrotaskメソッドであり、window
オブジェクト内に存在し、現時点では良好な互換性があります。
queueMicrotask
使用方法は非常に簡単で、マイクロタスクにパッケージ化したい関数を渡すだけです。次の例を参照してください。
console.log('1');
queueMicrotask(() => {
console.log('2');
Promise.resolve().then(() => {
console.log('3');
});
setTimeout(() => {
console.log('4');
queueMicrotask(() => {
console.log('5');
});
});
});
setTimeout(() => {
Promise.resolve().then(() => {
console.log('6');
});
console.log('7');
queueMicrotask(() => {
console.log('8');
});
});
console.log('9');
印刷結果: 1 9 2 3 7 6 8 4 5
比較的、queueMicrotask
マイクロタスクを生成するのに最も便利な方法なので、まだ実装していないブラウザ メーカーが時間を見つけてフォローアップすることを願っています。
オンラインで検索したところ、queueMicrotask の提案は 2018 年に承認され、2019 年に友人が API を導入したことがわかりました。私はそれについて今しか知りません。本当に恥ずかしいことです。