Automatically migrated from Gitolite

Sven Slootweg 7541d7d5d1 1.0.3 4 years ago
lib 6971e7902a Fixed default handling to not override optional arguments - I really should not be publishing modules while sleep-deprived... 4 years ago
src 6971e7902a Fixed default handling to not override optional arguments - I really should not be publishing modules while sleep-deprived... 4 years ago
.gitignore b81efc5bb0 .gitignore created by brackets-git extension 4 years ago
README.md 99d668e73c 1.0.0 4 years ago
gulpfile.js 99d668e73c 1.0.0 4 years ago
index.js 99d668e73c 1.0.0 4 years ago
package.json 7541d7d5d1 1.0.3 4 years ago
test.js 6971e7902a Fixed default handling to not override optional arguments - I really should not be publishing modules while sleep-deprived... 4 years ago

README.md

promisify-simple-callback

Promisifies a function that expects a callback with a single (result) argument - in other words, a callback that looks like function(result) { ... } - in what should be a reasonably performant manner.

Because sometimes, a module just doesn't conform to the Node.js callback convention.

License

WTFPL or CC0, whichever you prefer. A donation and/or attribution are appreciated, but not required.

Donate

My income consists largely of donations for my projects. If this module is useful to you, consider making a donation!

You can donate using Bitcoin, PayPal, Flattr, cash-in-mail, SEPA transfers, and pretty much anything else.

Contributing

Pull requests welcome. Please make sure your modifications are in line with the overall code style, and ensure that you're editing the files in src/, not those in lib/.

Build tool of choice is gulp; simply run gulp while developing, and it will watch for changes.

Be aware that by making a pull request, you agree to release your modifications under the licenses stated above.

Usage

var Promise = require("bluebird");
var promisifySimpleCallback = require("promisify-simple-callback");

/* Pretend that brokenAsyncMethod comes from a third-party library. */
function brokenAsyncMethod(someArg, options, cb) {
	doSomething(options, function(err, result) {
		cb(result);
	})
}

/* Promisify it! */
var promisifiedAsyncMethod = promisifySimpleCallback(brokenAsyncMethod, [null, {}]);

/* Now we can use it normally. */
Promise.try(function() {
	return promisifiedAsyncMethod("foobar");
}).then(function(result) {
	console.log("Done!", result);
});

API

promisifySimpleCallback(func, [defaults])

Promisifies the given func. The promisified method will also catch any synchronous errors, and propagate them as rejections.

You can also specify default argument values; often, there are optional arguments that come before the callback, and by specifying default values, you can make these arguments really optional.

Because promisification works by appending a callback at the end of the arguments list, you would otherwise have to include all the optional arguments just to make sure the callback ends up in the right place.

  • func: The callback-expecting function to promisify.
  • defaults: Optional. An array of default arguments to fill in. Any argument for which you specify null will be skipped - that is, it will be left exactly as is. This means that, for an unspecified argument, it is left to undefined.