a1adfc8706
25 lines
712 B
JavaScript
25 lines
712 B
JavaScript
'use strict'
|
|||
|
|||
exports.fromCallback = function (fn) {
|
|||
return Object.defineProperty(function (...args) {
|
|||
if (typeof args[args.length - 1] === 'function') fn.apply(this, args)
|
|||
else {
|
|||
return new Promise((resolve, reject) => {
|
|||
fn.call(
|
|||
this,
|
|||
...args,
|
|||
(err, res) => (err != null) ? reject(err) : resolve(res)
|
|||
)
|
|||
})
|
|||
}
|
|||
}, 'name', { value: fn.name })
|
|||
}
|
|||
|
|||
exports.fromPromise = function (fn) {
|
|||
return Object.defineProperty(function (...args) {
|
|||
const cb = args[args.length - 1]
|
|||
if (typeof cb !== 'function') return fn.apply(this, args)
|
|||
else fn.apply(this, args.slice(0, -1)).then(r => cb(null, r), cb)
|
|||
}, 'name', { value: fn.name })
|
|||
}
|