Skip to content

Instantly share code, notes, and snippets.

@MiguelLattuada
Created September 8, 2017 21:56
Show Gist options
  • Save MiguelLattuada/e852f7b6f57edab4b5ca5e0001e5a9c7 to your computer and use it in GitHub Desktop.
Save MiguelLattuada/e852f7b6f57edab4b5ca5e0001e5a9c7 to your computer and use it in GitHub Desktop.
Converts a Node.js-style callback API to a function that returns a Promise
module.exports = function(fn, ctx) {
if (!fn || !(fn instanceof Function)) throw Error('Invalid arguments');
return function() {
const _args = Array.from(arguments);
var promiseFn = function(resolve, reject) {
_args.push(function(err, data) {
if (err) return reject(err);
return resolve(data);
});
fn.apply(ctx, _args);
};
return new Promise(promiseFn);
};
}
@MiguelLattuada
Copy link
Author

/** USAGE **/
const wrap = require('./wrap');
const fs = require('fs');

const readFile = wrap(fs.readFile, null);

readfile('./data/somefile.txt').then(function(buffer) {
    const contents = buffer.toString('ascii');
}).catch(function(error) {
   console.log(error);
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment