pifall
pifall
is an implementation of promisifyAll
in terms of Node 8's
included util.promisify
.That is, it will iterate over your object's properties (
Reflect.ownKeys
), and
make an Async
-suffixed copy of any functions it finds. If it runs into a
getter, it will create the Async
version, which will grab the value from the
getter, and work as normal, if the value ends up being a function. Otherwise it
will throw.The
Async
-suffixed versions are as returned by util.promisify
.In the event that you already have a
foo
and a fooAsync
, the fooAsync
will
be overwritten. If it's not writable, or not configurable, pifall
will make no
attempt to circumvent that, meaning it will throw.Note that
pifall
operates in-place on the object. It does not return
anything, and the original object is augmented with the new methods.pifall
will flat-out refuse to promisify a built-in prototype, even it it's in
a prototype chain when the proto
option is provided. It will also flat-out
refuse to promisify objects whose typeof
is not function
or object
. It
will do this by throwing a TypeError
.On versions of Node not supporting
util.promisify
, a polyfill is used.Usage
Example:const obj = {
func (cb) {
setImmediate(() => {
cb(null, 'hello');
});
}
}
require('pifall')(obj);
obj.funcAsync().then(result => console.assert(result === 'hello'));
It can also take a second parameter, an optional options object, with the following properties:
proto
: If truthy, this causespifall
to include any properties
false
;classes
: If truthy, this causespifall
to treat functions whose names
pifall
ed. (Note: This does not
currently work for functions retrieved via getters. No matter what, these are
treated as ordinary non-class functions. In practice, this doesn't come up a
whole lot.) Default is false.suffix
: Sets the suffix for promisified versions of functions. Default
'Async'
.promisifier
: Use custom promisifier instead ofutil.promisify