The fs module includes promisified methods since Node 11
- Published at
- Updated at
- Reading time
- 2min
That's a quick one. ๐
When writing Node.js scripts that use the fs
module, I usually used the util
method to promisify the file-system methods. Promises-based methods allow using async/await
and that makes code easier to grasp and read.
Today I learned that since Node.js 11 the fs
module provides "promisified" methods in a promises
property. ๐
// old way have using promise-based fs methods
const { readFile } = require("fs");
const { promisify } = require('util');
const promisifiedReadFile = promisify(readFile);
promisifiedReadFile(__filename, { encoding: "utf8" })
.then(data => console.log(data));
// --------------------
// new way of using promise-based fs methods
// no util.promisify!!!
const { readFile } = require("fs").promises;
readFile(__filename, { encoding: "utf8" })
.then(data => console.log(data));
Using the promises
property you can now skip the step to transform callbacks into promises and there is no need to use promisify
. That's excellent news to flatten some source code and go all in with async/await
!
Update: Since Node.js 14 the fs
module provides two ways to use the promises-based file-system methods. The promises are available via require('fs')
or require('fs/promises')
.
// Since Node.js v14: use promise-based fs methods
// no util.promisify!!!
const { readFile } = require("fs/promises");
readFile(__filename, { encoding: "utf8" })
.then(data => console.log(data));
I'm very excited about the /promises
path addition because the Node.js maintainers seem to agree on this way to expose more promise-based methods of existing modules in the future.
In Node.js v15 the Timers module also provides an experimental timers/promises
package. That means you can do await setTimeout
soon โ Node.js is evolving and that means less util
and more coding! ๐
If you want to read more Node.js tips and tricks head over to the Node.js section!
Join 5.4k readers and learn something new every week with Web Weekly.