1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00
next.js/packages/next/lib/promisify.js

27 lines
870 B
JavaScript
Raw Normal View History

const kCustomPromisifyArgsSymbol = Symbol('customPromisifyArgs')
module.exports = function promisify (original) {
// Names to create an object from in case the callback receives multiple
// arguments, e.g. ['stdout', 'stderr'] for child_process.exec.
const argumentNames = original[kCustomPromisifyArgsSymbol]
return function fn (...args) {
return new Promise((resolve, reject) => {
try {
original.call(this, ...args, (err, ...values) => {
if (err) {
reject(err)
} else if (argumentNames !== undefined && values.length > 1) {
const obj = {}
for (var i = 0; i < argumentNames.length; i++) { obj[argumentNames[i]] = values[i] }
resolve(obj)
} else {
resolve(values[0])
}
})
} catch (err) {
reject(err)
}
})
}
}