Sha256: 2cc88d3c446f208ed2bf624de9fcab99e26a122eeaf922e11fd1d3a9193a9f2c
Contents?: true
Size: 1.58 KB
Versions: 17
Compression:
Stored size: 1.58 KB
Contents
var Promise = require('native-or-bluebird') var assert = require('assert') module.exports = thenify /** * Turn async functions into promises * * @param {Function} $$__fn__$$ * @return {Function} * @api public */ function thenify($$__fn__$$) { assert(typeof $$__fn__$$ === 'function') return eval(createWraper($$__fn__$$.name)) } /** * Turn async functions into promises and backward compatible with callback * * @param {Function} $$__fn__$$ * @return {Function} * @api public */ thenify.withCallback = function ($$__fn__$$) { assert(typeof $$__fn__$$ === 'function') return eval(createWraper($$__fn__$$.name, true)) } function createCallback(resolve, reject) { return function(err, value) { if (err) return reject(err) var length = arguments.length if (length <= 2) return resolve(value) var values = new Array(length - 1) for (var i = 1; i < length; ++i) values[i - 1] = arguments[i] resolve(values) } } function createWraper(name, withCallback) { withCallback = withCallback ? 'var lastType = typeof arguments[len - 1]\n' + 'if (lastType === "function") return $$__fn__$$.apply(self, arguments)\n' : '' return '(function ' + (name || '') + '() {\n' + 'var self = this\n' + 'var len = arguments.length\n' + withCallback + 'var args = new Array(len + 1)\n' + 'for (var i = 0; i < len; ++i) args[i] = arguments[i]\n' + 'var lastIndex = i\n' + 'return new Promise(function (resolve, reject) {\n' + 'args[lastIndex] = createCallback(resolve, reject)\n' + '$$__fn__$$.apply(self, args)\n' + '})\n' + '})' }
Version data entries
17 entries across 17 versions & 2 rubygems