diff options
author | Dan Finlay <dan@danfinlay.com> | 2016-11-29 09:27:20 +0800 |
---|---|---|
committer | Dan Finlay <dan@danfinlay.com> | 2016-11-29 09:27:20 +0800 |
commit | 9e764b193517c935fa04d4722357cb48abcfb2a2 (patch) | |
tree | 3a94636ea384252118eb04cf42a7c11c7fc6cea4 | |
parent | 80e76b45ee67900b5a60da1ddcd8b310f1e92413 (diff) | |
download | tangerine-wallet-browser-9e764b193517c935fa04d4722357cb48abcfb2a2.tar tangerine-wallet-browser-9e764b193517c935fa04d4722357cb48abcfb2a2.tar.gz tangerine-wallet-browser-9e764b193517c935fa04d4722357cb48abcfb2a2.tar.bz2 tangerine-wallet-browser-9e764b193517c935fa04d4722357cb48abcfb2a2.tar.lz tangerine-wallet-browser-9e764b193517c935fa04d4722357cb48abcfb2a2.tar.xz tangerine-wallet-browser-9e764b193517c935fa04d4722357cb48abcfb2a2.tar.zst tangerine-wallet-browser-9e764b193517c935fa04d4722357cb48abcfb2a2.zip |
Fix nodeify
-rw-r--r-- | app/scripts/lib/nodeify.js | 68 | ||||
-rw-r--r-- | test/unit/nodeify-test.js | 22 |
2 files changed, 35 insertions, 55 deletions
diff --git a/app/scripts/lib/nodeify.js b/app/scripts/lib/nodeify.js index f48df34ef..56b793852 100644 --- a/app/scripts/lib/nodeify.js +++ b/app/scripts/lib/nodeify.js @@ -1,59 +1,17 @@ -/* NODEIFY - * Modified from original npm package "nodeify" - * https://github.com/then/nodeify - * - * Removed Promise dependency, to only support - * native Promises and reduce bundle size. - */ - -var isPromise = require('is-promise') - -var nextTick -if (typeof setImmediate === 'function') nextTick = setImmediate -else if (typeof process === 'object' && process && process.nextTick) nextTick = process.nextTick -else nextTick = function (cb) { setTimeout(cb, 0) } - -module.exports = nodeify -function nodeify(promise, cb) { - if (typeof cb !== 'function') return promise - return promise - .then(function (res) { - nextTick(function () { - cb(null, res) - }) - }, function (err) { - nextTick(function () { - cb(err) - }) - }) -} -function nodeifyThis(cb) { - return nodeify(this, cb) -} - -nodeify.extend = extend -nodeify.Promise = NodeifyPromise - -function extend(prom) { - if (prom && isPromise(prom)) { - prom.nodeify = nodeifyThis - var then = prom.then - prom.then = function () { - return extend(then.apply(this, arguments)) +module.exports = function (promiseFn) { + return function () { + var args = [] + for (var i = 0; i < arguments.length - 1; i++) { + args.push(arguments[i]) } - return prom - } else if (typeof prom === 'function') { - prom.prototype.nodeify = nodeifyThis - } -} + var cb = arguments[arguments.length - 1] -function NodeifyPromise(fn) { - if (!(this instanceof NodeifyPromise)) { - return new NodeifyPromise(fn) + return promiseFn.apply(this, args) + .then(function (result) { + cb(null, result) + }) + .catch(function (reason) { + cb(reason) + }) } - Promise.call(this, fn) - extend(this) } - -NodeifyPromise.prototype = Object.create(Promise.prototype) -NodeifyPromise.prototype.constructor = NodeifyPromise diff --git a/test/unit/nodeify-test.js b/test/unit/nodeify-test.js new file mode 100644 index 000000000..d4ac2ea0b --- /dev/null +++ b/test/unit/nodeify-test.js @@ -0,0 +1,22 @@ +const assert = require('assert') +const nodeify = require('../../app/scripts/lib/nodeify') + +describe.only('nodeify', function() { + + var obj = { + foo: 'bar', + promiseFunc: function (a) { + var solution = this.foo + a + return Promise.resolve(solution) + } + } + + it('should retain original context', function(done) { + var nodified = nodeify(obj.promiseFunc).bind(obj) + nodified('baz', function (err, res) { + assert.equal(res, 'barbaz') + done() + }) + }) + +}) |