Reasoning about the layout of an event-loop tick, consider this code. What does it print, and which scheduling rule explains the ordering?
const fs = require('fs');
setImmediate(() => console.log('immediate'));
Promise.resolve().then(() => console.log('promise'));
fs.readFile(__filename, () => {
setTimeout(() => console.log('timeout'), 0);
setImmediate(() => console.log('inner immediate'));
process.nextTick(() => console.log('nextTick'));
});
console.log('sync');