Skip to content

Commit 71cf28c

Browse files
committed
refactor(ngResource): handle success and error callbacks using the same promise
1 parent c9dffde commit 71cf28c

File tree

3 files changed

+17
-14
lines changed

3 files changed

+17
-14
lines changed

src/ngResource/resource.js

+14-7
Original file line numberDiff line numberDiff line change
@@ -701,19 +701,15 @@ angular.module('ngResource', ['ng']).
701701
response.resource = value;
702702

703703
return response;
704-
}, function(response) {
705-
(error || noop)(response);
706-
return $q.reject(response);
707704
});
708705

709-
promise = promise['finally'](function(response) {
706+
promise = promise['finally'](function() {
710707
value.$resolved = true;
711708
if (!isInstanceCall && cancellable) {
712709
value.$cancelRequest = angular.noop;
713710
$timeout.cancel(numericTimeoutPromise);
714711
timeoutDeferred = numericTimeoutPromise = httpConfig.timeout = null;
715712
}
716-
return response;
717713
});
718714

719715
promise = promise.then(
@@ -722,21 +718,32 @@ angular.module('ngResource', ['ng']).
722718
(success || noop)(value, response.headers);
723719
return value;
724720
},
725-
responseErrorInterceptor);
721+
responseErrorInterceptor || error ?
722+
function(response) {
723+
(error || noop)(response);
724+
(responseErrorInterceptor || noop)(response);
725+
return response;
726+
}
727+
: undefined);
726728

727729
if (!isInstanceCall) {
728730
// we are creating instance / collection
729731
// - set the initial promise
730732
// - return the instance / collection
731733
value.$promise = promise;
732734
value.$resolved = false;
733-
if (cancellable) value.$cancelRequest = timeoutDeferred.resolve;
735+
if (cancellable) value.$cancelRequest = cancelRequest;
734736

735737
return value;
736738
}
737739

738740
// instance call
739741
return promise;
742+
743+
function cancelRequest(value) {
744+
promise.catch(noop);
745+
timeoutDeferred.resolve(value);
746+
}
740747
};
741748

742749

test/ng/animateRunnerSpec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ describe("$$AnimateRunner", function() {
206206
var animationComplete = false;
207207
runner.finally(function() {
208208
animationComplete = true;
209-
}).then(noop, noop);
209+
}).catch(noop);
210210
runner[method]();
211211
$rootScope.$digest();
212212
expect(animationComplete).toBe(true);

test/ngResource/resourceSpec.js

+2-6
Original file line numberDiff line numberDiff line change
@@ -1052,8 +1052,7 @@ describe("basic usage", function() {
10521052
it('should call the error callback if provided on non 2xx response', function() {
10531053
$httpBackend.expect('GET', '/CreditCard/123').respond(ERROR_CODE, ERROR_RESPONSE);
10541054

1055-
var ccs = CreditCard.get({id:123}, callback, errorCB);
1056-
ccs.$promise.then(noop, noop);
1055+
CreditCard.get({id:123}, callback, errorCB);
10571056
$httpBackend.flush();
10581057
expect(errorCB).toHaveBeenCalledOnce();
10591058
expect(callback).not.toHaveBeenCalled();
@@ -1063,8 +1062,7 @@ describe("basic usage", function() {
10631062
it('should call the error callback if provided on non 2xx response (without data)', function() {
10641063
$httpBackend.expect('GET', '/CreditCard').respond(ERROR_CODE, ERROR_RESPONSE);
10651064

1066-
var ccs = CreditCard.get(callback, errorCB);
1067-
ccs.$promise.then(noop, noop);
1065+
CreditCard.get(callback, errorCB);
10681066
$httpBackend.flush();
10691067
expect(errorCB).toHaveBeenCalledOnce();
10701068
expect(callback).not.toHaveBeenCalled();
@@ -1564,7 +1562,6 @@ describe('cancelling requests', function() {
15641562
});
15651563

15661564
var ccs = CreditCard.get();
1567-
ccs.$promise.catch(noop);
15681565
ccs.$cancelRequest();
15691566
expect($httpBackend.flush).toThrow(new Error('No pending request to flush !'));
15701567

@@ -1584,7 +1581,6 @@ describe('cancelling requests', function() {
15841581
});
15851582

15861583
var ccs = CreditCard.get();
1587-
ccs.$promise.catch(noop);
15881584
ccs.$cancelRequest();
15891585
expect($httpBackend.flush).toThrow(new Error('No pending request to flush !'));
15901586

0 commit comments

Comments
 (0)