diff options
-rw-r--r-- | lib/async.js | 19 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rwxr-xr-x | test/test-async.js | 76 |
3 files changed, 88 insertions, 9 deletions
diff --git a/lib/async.js b/lib/async.js index d9e6244..84d17aa 100644 --- a/lib/async.js +++ b/lib/async.js @@ -1186,18 +1186,19 @@ var result; try { result = func.apply(this, args); - // if result is Promise object - if (typeof result.then === "function") { - result.then(function(values) { - var args = [null].concat(values); - callback.apply(this, args); - }).catch(callback); - } else { - callback(null, result); - } } catch (e) { return callback(e); } + // if result is Promise object + if (typeof result !== 'undefined' && typeof result.then === "function") { + result.then(function(value) { + callback(null, value); + }).catch(function(err) { + callback(new Error(err)); + }); + } else { + callback(null, result); + } }); }; diff --git a/package.json b/package.json index e26d3c6..2031fa3 100644 --- a/package.json +++ b/package.json @@ -21,11 +21,13 @@ "devDependencies": { "benchmark": "bestiejs/benchmark.js", "coveralls": "^2.11.2", + "es6-promise": "^2.3.0", "jshint": "~2.8.0", "lodash": "^3.9.0", "mkdirp": "~0.5.1", "nodeunit": ">0.0.0", "nyc": "^2.1.0", + "rsvp": "^3.0.18", "uglify-js": "~2.4.0", "xyz": "^0.5.0", "yargs": "~3.9.1" diff --git a/test/test-async.js b/test/test-async.js index cd7a2a1..e5b45f5 100755 --- a/test/test-async.js +++ b/test/test-async.js @@ -4267,5 +4267,81 @@ exports['asyncify'] = { test.ok(e.message === "callback error"); test.done(); } + }, + + 'es6-promise': { + 'setUp': function (callback) { + this.Promise = require('es6-promise').Promise; + callback(); + }, + + 'resolve': function(test) { + var promisified = function(argument) { + return new this.Promise(function (resolve) { + setTimeout(function () { + resolve(argument + " resolved"); + }, 15); + }); + }; + async.asyncify(promisified)("argument", function (err, value) { + if (err) { + return test.done(new Error(err)); + } + test.ok(value === "argument resolved"); + test.done(); + }); + }, + + 'reject': function(test) { + var promisified = function(argument) { + return new this.Promise(function (resolve, reject) { + reject(argument + " rejected"); + }); + }; + async.asyncify(promisified)("argument", function (err) { + console.log(err.message); + test.ok(err); + test.ok(err.message === "argument rejected"); + test.done(); + }); + } + }, + + 'rsvp': { + 'setUp': function (callback) { + this.Promise = require('rsvp').Promise; + callback(); + }, + + 'resolve': function(test) { + var promisified = function(argument) { + return new this.Promise(function (resolve) { + setTimeout(function () { + resolve(argument + " resolved"); + }, 15); + }); + }; + async.asyncify(promisified)("argument", function (err, value) { + if (err) { + return test.done(new Error(err)); + } + test.ok(value === "argument resolved"); + test.done(); + }); + }, + + 'reject': function(test) { + var promisified = function(argument) { + return new this.Promise(function (resolve, reject) { + reject(argument + " rejected"); + }); + }; + async.asyncify(promisified)("argument", function (err) { + console.log(err.message); + test.ok(err); + test.ok(err.message === "argument rejected"); + test.done(); + }); + } } }; |