Skip to content

Instantly share code, notes, and snippets.

@danielkhan
Last active November 28, 2020 02:59
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielkhan/ef25345de7897790ccca80af2a2c19b2 to your computer and use it in GitHub Desktop.
Save danielkhan/ef25345de7897790ccca80af2a2c19b2 to your computer and use it in GitHub Desktop.
const fs = require("fs");
setImmediate(() => {
process.stdout.write(`setImmediate (after poll phase)\n`);
process.nextTick(() => {
process.stdout.write(`nextTick (nested registered in setImmediate())\n`);
});
});
setTimeout(() => {
process.stdout.write(`setTimeout (timers phase)\n`);
process.nextTick(() => {
process.stdout.write(`nextTick (nested registered in setTimeout())\n`);
});
}, 0);
fs.readdir("./", (err, data) => {
process.stdout.write(`readdir (poll phase)\n`);
process.nextTick(() => {
process.stdout.write(`nextTick (nested registered in readdir())\n`);
});
});
process.nextTick(() => {
process.stdout.write(`nextTick (registered on top level)\n`);
});
// Output:
/*
nextTick (registered on top level)
setTimeout (timers phase)
nextTick (nested registered in setTimeout())
readdir (poll phase)
nextTick (nested registered in readdir())
setImmediate (after poll phase)
nextTick (nested registered in setImmediate())
*/
@Divine1
Copy link

Divine1 commented Nov 28, 2020

This example looks good. Thanks @danielkhan

Also, i added setImmediate inside setTimeout to verify once more if process.nextTick(function(){}) (without i/o) gets executed after every phase in the eventLoop. From the output i received i can infer the answer as yes.

const fs = require("fs");
setImmediate(() => {
  process.stdout.write(`setImmediate (after poll phase)\n`);
  process.nextTick(() => {
    process.stdout.write(`nextTick (nested registered in setImmediate())\n`);
  });
});

setTimeout(() => {
  process.stdout.write(`setTimeout (timers phase)\n`);
  /* new start */
  setImmediate(()=>{
    process.stdout.write(`setTimeout (setImmediate phase)\n`);
  })
  /* new end */
  process.nextTick(() => {
    process.stdout.write(`nextTick (nested registered in setTimeout())\n`);
  });
}, 0);

fs.readdir("./", (err, data) => {
  process.stdout.write(`readdir (poll phase)\n`);
  process.nextTick(() => {
    process.stdout.write(`nextTick (nested registered in readdir())\n`);
  });
});

process.nextTick(() => {
  process.stdout.write(`nextTick (registered on top level)\n`);
});

// Output:
/*
nextTick (registered on top level)
setTimeout (timers phase)
nextTick (nested registered in setTimeout())
readdir (poll phase)
nextTick (nested registered in readdir())
setImmediate (after poll phase)
nextTick (nested registered in setImmediate())
setTimeout (setImmediate phase)
*/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment