What is es6-promisify?
The es6-promisify package is a utility that converts callback-based functions to return Promises, making it easier to work with asynchronous code in a more modern and readable way.
What are es6-promisify's main functionalities?
Promisify a single callback-based function
This feature allows you to convert a single callback-based function, such as `fs.readFile`, into a function that returns a Promise. This makes it easier to handle asynchronous operations using modern async/await syntax or Promise chaining.
const promisify = require('es6-promisify');
const fs = require('fs');
const readFileAsync = promisify(fs.readFile);
readFileAsync('example.txt', 'utf8')
.then(data => console.log(data))
.catch(err => console.error(err));
Promisify an entire object of callback-based functions
This feature allows you to promisify all functions within an object, such as the `fs` module, so that all of its methods return Promises. This is useful for working with modules that have multiple callback-based methods.
const promisify = require('es6-promisify');
const fs = require('fs');
const fsAsync = promisify(fs);
fsAsync.readFile('example.txt', 'utf8')
.then(data => console.log(data))
.catch(err => console.error(err));
Other packages similar to es6-promisify
util.promisify
The `util.promisify` function is a built-in Node.js utility that provides similar functionality to es6-promisify. It converts callback-based functions to return Promises. Since it is built into Node.js, it does not require an additional package installation. However, it is only available in Node.js versions 8.0.0 and above.
bluebird
Bluebird is a fully-featured Promise library that includes a `promisify` method. It offers more advanced features and better performance compared to es6-promisify. Bluebird is a good choice if you need additional Promise utilities and optimizations.
pify
Pify is a lightweight utility that promisifies callback-style functions. It is similar to es6-promisify but offers more customization options, such as filtering which methods to promisify and handling multiple arguments. Pify is a good alternative if you need more control over the promisification process.
es6-promisify
Converts callback-based functions to Promises, using a boilerplate callback function.
Install
Install with npm
npm install es6-promisify
Example
const {promisify} = require("es6-promisify");
const fs = require("fs");
const stat = promisify(fs.stat);
try {
const stats = await stat("example.txt");
console.log("Got stats", stats);
} catch (err) {
console.error("Yikes!", err);
}
Promisify methods
const {promisify} = require("es6-promisify");
const redis = require("redis").createClient(6379, "localhost");
const client = promisify(redis.send_command.bind(redis));
try {
const pong = await client.ping();
console.log("Got", pong);
} catch (err) {
console.error("Unexpected error", err);
} finally {
redis.quit();
}
Handle multiple callback arguments, with named parameters
const {promisify} = require("es6-promisify");
function test(cb) {
return cb(undefined, 1, 2, 3);
}
test[promisify.argumentNames] = ["one", "two", "three"];
const multi = promisify(test);
const result = await multi();
console.log(result);
Provide your own Promise implementation
const {promisify} = require("es6-promisify");
promisify.Promise = require("bluebird");
const test = promisify(cb => cb(undefined, "test"));
const result = await test();
console.log(result);
Tests
Test with tape
$ npm test
Published under the MIT License.