summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAydar Zartdinov <zartdinov@gmail.com>2015-07-09 06:05:43 +0300
committerAydar Zartdinov <zartdinov@gmail.com>2015-07-09 06:05:43 +0300
commit3c2fd71e350f6a5cda22696ed7cc2022fe566128 (patch)
treed43280c5a110839a212e2e6bd02b9573906317ba
parentb89b1acf95188bc74e3e528a72bf22ce30e1b677 (diff)
downloadasync-3c2fd71e350f6a5cda22696ed7cc2022fe566128.tar.gz
callback moved out from try/catch block
unit tests for es6-promise and rsvp
-rw-r--r--lib/async.js19
-rw-r--r--package.json2
-rwxr-xr-xtest/test-async.js76
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();
+ });
+ }
}
};