mz
Version:
modernize node.js to current ECMAScript standards
60 lines (55 loc) • 1.38 kB
JavaScript
var falsey = {
0: true,
false: true,
no: true,
nope: true
}
var bloob = process.env.MZ_BLUEBIRD
if (typeof Promise === 'undefined' || (bloob && !falsey[bloob])) {
// use bluebird
var promisify
try {
promisify = require('bluebird').promisify
} catch (err) {
throw new Error('please install bluebird!')
}
module.exports = function mz_promisify(name, fn) {
return promisify(fn)
}
} else if (typeof Promise === 'function') {
// var set = require('function-name')
var makeCallback = function(resolve, reject) {
return function(err, value) {
if (err) {
reject(err)
} else {
var len = arguments.length
if (len > 2) {
var values = new Array(len - 1)
for (var i = 1; i < len; ++i) {
values[i - 1] = arguments[i]
}
resolve(values)
} else {
resolve(value)
}
}
}
}
module.exports = function mz_promisify(name, fn) {
// set(anonymous, name)
return anonymous
function anonymous() {
var len = arguments.length
var args = new Array(len + 1)
for (var i = 0; i < len; ++i) {
args[i] = arguments[i]
}
var lastIndex = i
return new Promise(function (resolve, reject) {
args[lastIndex] = makeCallback(resolve, reject)
fn.apply(null, args)
})
}
}
}