JavaScript Async - foolmacky/DevelopDocs GitHub Wiki
node.jsのエンジンは、ブラウザ上のJavaScriptエンジンに寄せた仕様になってはいるが、ブラウザのエンジンに備わってはいない機構ももつ
- すべてのmicrotaskは次のmacrotaskが実行される前に完了する。実行環境の状態が「同じ」であることを保証する必要があるため。
- microtask間では連続ですべて処理され、間に他のイベントの処理などは挿入されない。
- 長い時間かかる処理などは、処理を分割してtask化し、途中で描画などを処理させることが行われる
//コードが実行される順番
//1番目 taskとして処理
f1();
setTimeout(() => {
//5番目 taskとして処理されるcallback関数
f5();
});
Promise.resolve()
.then(() => {
//3番目 microtaskとして処理されるcallback関数
f3();
})
.then(() => {
//4番目 microtaskとして処理されるcallback関数
f4();
});
//2番目 taskとして処理
f2();
■ 参考
- event loop https://ja.javascript.info/event-loop#ref-1256
- microtasks https://ja.javascript.info/microtask-queue
- promise, async/await https://ja.javascript.info/async
- engine and event loop https://www.youtube.com/watch?v=8aGhZQkoFbQ