Tianhe Gao

Node.js Event Loop

https://nodejs.org/en/learn/asynchronous-work/event-loop-timers-and-nexttick

https://www.freecodecamp.org/news/a-guide-to-the-node-js-event-loop/

https://nodejs.org/en/learn/asynchronous-work/understanding-setimmediate

 1const baz = () => console.log('baz');
 2const foo = () => console.log('foo');
 3const zoo = () => console.log('zoo');
 4
 5const start = () => {
 6  console.log('start');
 7  setImmediate(baz);
 8  new Promise((resolve, reject) => {
 9    resolve('bar');
10  }).then(resolve => {
11    console.log(resolve);
12    process.nextTick(zoo);
13  });
14  process.nextTick(foo);
15};
16
17start();
18
19// start foo bar zoo baz

but in *.mjs is different:

1// start bar foo zoo baz

because ES Module is asyncchronous, second output is 'bar', not 'foo'

Event loop's order of operations:

 1   ┌───────────────────────────┐
 2┌─>│           timers          │
 3│  └─────────────┬─────────────┘
 4│  ┌─────────────┴─────────────┐
 5│  │     pending callbacks     │
 6│  └─────────────┬─────────────┘
 7│  ┌─────────────┴─────────────┐
 8│  │       idle, prepare       │
 9│  └─────────────┬─────────────┘      ┌───────────────┐
10│  ┌─────────────┴─────────────┐      │   incoming:   │
11│  │           poll            │<─────┤  connections, │
12│  └─────────────┬─────────────┘      │   data, etc.  │
13│  ┌─────────────┴─────────────┐      └───────────────┘
14│  │           check           │
15│  └─────────────┬─────────────┘
16│  ┌─────────────┴─────────────┐
17└──┤      close callbacks      │
18   └───────────────────────────┘

No notes link to this note