DEV Community


Discussion on: Understanding the Node.js event loop phases and how it executes the JavaScript code.

abdallahzalat3 profile image
Abdallah Zalat

Thank you, great one 💙
But I have a little question..
What's the difference between fs.readFile and fs.Promises.readFile , in other words where will be fs.Promises.readFile priority in the context of this post

lunaticmonk profile image
Sumedh Nimkarde Author • Edited

Since, promises come under microtasks, as far as my knowledge, fs.Promises.readFile gets the priority but the only catch is that the handler passed to .then(fn) i.e fn here is pushed to the queue (registered) only after the promise is resolved/rejected.

Whereas, if it is a fs.readFile, its callback is immediately registered by the event loop when it(the event loop) encounters the fs.readFile operation.

Thus, if you do something like:

fs.promises.readFile(`./file.txt`).then((buff) => {
    console.log(`> resolved promise`);

  fs.readFile(`./file.txt`, (err, buff) => {
    if (err) throw err;
    console.log(`> not a promise`);

You may see that the output will be:

> not a promise
> resolved promise

Hope this helps!

abdallahzalat3 profile image
Abdallah Zalat • Edited

Thank you for replying 💙 , but for this piece of code I put fs.promise.readFile upfront so it would(should) be resolved and pushed to the queue early before settimeout, can you clarify why this output .. !

const fs=require('fs')

// text.txt file just contains 'Hello World'
const read=fs.promises.readFile('./text.txt','utf-8')

    console.log('from promise')

//just looping to ensure that the file has finished reading
for(let i=0;i<10000;i++){

setTimeout(() => {
    console.log('from setTimeout')
}, 0);

// looping...
// from setTimeout
// from promise