From 074b0675a1f97dce07f520f1ae6198ed3c604000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20Galfas=C3=B3?= Date: Fri, 31 Jan 2014 15:22:36 -0300 Subject: [PATCH] fix($q): make $q.reject support `finally` and `catch` Add support for the functions `finally` and `catch` to the promise returned by `$q.reject` Closes #6048 Closes #6076 --- src/ng/q.js | 8 +++++++- test/ng/qSpec.js | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/ng/q.js b/src/ng/q.js index 5c36dc074987..0a98c3350994 100644 --- a/src/ng/q.js +++ b/src/ng/q.js @@ -223,7 +223,7 @@ function qFactory(nextTick, exceptionHandler) { reject: function(reason) { - deferred.resolve(reject(reason)); + deferred.resolve(createInternalRejectedPromise(reason)); }, @@ -380,6 +380,12 @@ function qFactory(nextTick, exceptionHandler) { * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`. */ var reject = function(reason) { + var result = defer(); + result.reject(reason); + return result.promise; + }; + + var createInternalRejectedPromise = function(reason) { return { then: function(callback, errback) { var result = defer(); diff --git a/test/ng/qSpec.js b/test/ng/qSpec.js index 73579137fe65..b12a4a8f4389 100644 --- a/test/ng/qSpec.js +++ b/test/ng/qSpec.js @@ -959,6 +959,13 @@ describe('q', function() { mockNextTick.flush(); expect(log).toEqual(['errorBroken(rejected)->throw(catch me!)', 'errorAffected(catch me!)->reject(catch me!)']); }); + + + it('should have functions `finally` and `catch`', function() { + var rejectedPromise = q.reject('rejected'); + expect(rejectedPromise['finally']).not.toBeUndefined(); + expect(rejectedPromise['catch']).not.toBeUndefined(); + }); });