You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
796 B
27 lines
796 B
'use strict'; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.default = awaitify; |
|
// conditionally promisify a function. |
|
// only return a promise if a callback is omitted |
|
function awaitify(asyncFn, arity = asyncFn.length) { |
|
if (!arity) throw new Error('arity is undefined'); |
|
function awaitable(...args) { |
|
if (typeof args[arity - 1] === 'function') { |
|
return asyncFn.apply(this, args); |
|
} |
|
|
|
return new Promise((resolve, reject) => { |
|
args[arity - 1] = (err, ...cbArgs) => { |
|
if (err) return reject(err); |
|
resolve(cbArgs.length > 1 ? cbArgs : cbArgs[0]); |
|
}; |
|
asyncFn.apply(this, args); |
|
}); |
|
} |
|
|
|
return awaitable; |
|
} |
|
module.exports = exports['default']; |