Before promises/async/await became the standard, it was a convention for async APIs in JavaScript to accept callbacks as the last argument. Many async versions of Node.js APIs (e.g. fs.readFile and fs.rm) have such signatures. Node.js' util.promisify function was created to wrap callback-based functions in versions that return Promises so they can be used with async/await.
Implement a function promisify that takes a function following the common callback-last, error-first style, i.e. taking a (err, value) => ... callback as the last argument, and returns a version that returns promises.
When invoking the original function, the returned function should preserve its call-time this value, forward all supplied arguments, and append the callback as the final argument.
Examples
// Example function with callback as last argument
// The callback has the signature `(err, value) => any`
functionfoo(url, options, callback){
apiCall(url, options)
.then((data)=>callback(null, data))
.catch((err)=>callback(err));
}
const promisifiedFoo =promisify(foo);
const data =awaitpromisifiedFoo('example.com',{foo:1});
Hints
New
Asked at these companies
Unlock company signalsPremium shows which companies ask this question so you can prioritize practice by target company.