Menu
CoddyTech

イベントループ

CoddyのNode.jsジャーニー「Node.jsの基礎」セクションの一部。レッスン 18/24。

コールバックとプロミスは後で実行されるため、正確な実行順序を把握していないとバグにつながります。

Nodeはまず、同期コードを最後まで実行します。次にマイクロタスク、つまりプロミスのコールバックとqueueMicrotaskに渡された関数を実行します。その後にタイマーが実行されます。setTimeout(fn, 0)であっても、設定時間が経過してから実行されます。

setTimeout(() => console.log('C timer'), 0);
Promise.resolve().then(() => console.log('B promise'));
console.log('A sync');
// A sync, B promise, C timer

遅延時間が0の場合、マイクロタスクの後、できるだけ早く実行されます。マイクロタスクより先に実行されることはありません。タイマーは遅延時間の順に実行され、遅延時間が同じ場合は、先に設定されたタイマーが先に実行されます。

challenge icon

チャレンジ

簡単
  • order.jsは、1 sync、2 microtask、3 timeout、4 timeout laterの順に出力します。
  • 4行はそのままの位置に置いてください。1つのqueueMicrotask呼び出しと2つのsetTimeout呼び出しで囲みます。

node order.jsを実行して、自分の予想と比べてください。次に、両方のタイマーの遅延を0にして、もう一度実行してください。

自分で試してみよう

// これらの行を移動せずに、番号順に出力されるようにしてください。
// 代わりに、これらをqueueMicrotaskとsetTimeoutで囲んでください。
console.log('4 timeout later');
console.log('3 timeout');
console.log('2 microtask');
console.log('1 sync');
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Node.jsの基礎のすべてのレッスン