From 94576bb80d2860f52e910153a94b7cd53c5bc745 Mon Sep 17 00:00:00 2001 From: Michael Schoonmaker Date: Tue, 4 Jun 2013 22:38:17 -0700 Subject: [PATCH] Added a method to attach "Node-style" callbacks as handlers. This makes integrating with callback users easier. --- test/promise-test.js | 32 ++++++++++++++++++++++++++++++++ when.js | 15 +++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/test/promise-test.js b/test/promise-test.js index 28f5c985..ee151b35 100644 --- a/test/promise-test.js +++ b/test/promise-test.js @@ -660,6 +660,38 @@ define('when/promise-test', function (require) { } }, + 'both': { + 'should return a promise': function () { + assert.isFunction(defer().promise.both().then); + }, + + 'should register callback as callback': function (done) { + var d = when.defer(); + + d.promise.both( + function(err, val) { + assert.equals(val, 1); + done(); + } + ); + + d.resolve(1); + }, + + 'should register callback as errback': function (done) { + var d = when.defer(); + + d.promise.both( + function(err) { + assert.equals(err, 1); + done(); + } + ); + + d.reject(1); + } + }, + 'yield': { 'should return a promise': function() { assert.isFunction(defer().promise.yield().then); diff --git a/when.js b/when.js index b543fb57..82dd84db 100644 --- a/when.js +++ b/when.js @@ -95,6 +95,21 @@ define(function () { } }, + /** + * Calls combinedCallback with (reason, value) on either fulfillment or + * rejection. + * @param {function} combinedCallback handler to be called on either + * fulfillment or rejection. + * @return {Promise} + */ + both: function (combinedCallback) { + return this.then(success, combinedCallback); + + function success(value) { + return combinedCallback(null, value); + } + }, + /** * Shortcut for .then(function() { return value; }) * @param {*} value