refactor(ngResource): handle success and error callbacks using the same promise

This commit is contained in:
Lucas Mirelmann
2016-01-08 12:35:38 +01:00
parent c9dffde1cb
commit 71cf28cf06
3 changed files with 17 additions and 14 deletions
+14 -7
View File
@@ -701,19 +701,15 @@ angular.module('ngResource', ['ng']).
response.resource = value;
return response;
}, function(response) {
(error || noop)(response);
return $q.reject(response);
});
promise = promise['finally'](function(response) {
promise = promise['finally'](function() {
value.$resolved = true;
if (!isInstanceCall && cancellable) {
value.$cancelRequest = angular.noop;
$timeout.cancel(numericTimeoutPromise);
timeoutDeferred = numericTimeoutPromise = httpConfig.timeout = null;
}
return response;
});
promise = promise.then(
@@ -722,7 +718,13 @@ angular.module('ngResource', ['ng']).
(success || noop)(value, response.headers);
return value;
},
responseErrorInterceptor);
responseErrorInterceptor || error ?
function(response) {
(error || noop)(response);
(responseErrorInterceptor || noop)(response);
return response;
}
: undefined);
if (!isInstanceCall) {
// we are creating instance / collection
@@ -730,13 +732,18 @@ angular.module('ngResource', ['ng']).
// - return the instance / collection
value.$promise = promise;
value.$resolved = false;
if (cancellable) value.$cancelRequest = timeoutDeferred.resolve;
if (cancellable) value.$cancelRequest = cancelRequest;
return value;
}
// instance call
return promise;
function cancelRequest(value) {
promise.catch(noop);
timeoutDeferred.resolve(value);
}
};
+1 -1
View File
@@ -206,7 +206,7 @@ describe("$$AnimateRunner", function() {
var animationComplete = false;
runner.finally(function() {
animationComplete = true;
}).then(noop, noop);
}).catch(noop);
runner[method]();
$rootScope.$digest();
expect(animationComplete).toBe(true);
+2 -6
View File
@@ -1052,8 +1052,7 @@ describe("basic usage", function() {
it('should call the error callback if provided on non 2xx response', function() {
$httpBackend.expect('GET', '/CreditCard/123').respond(ERROR_CODE, ERROR_RESPONSE);
var ccs = CreditCard.get({id:123}, callback, errorCB);
ccs.$promise.then(noop, noop);
CreditCard.get({id:123}, callback, errorCB);
$httpBackend.flush();
expect(errorCB).toHaveBeenCalledOnce();
expect(callback).not.toHaveBeenCalled();
@@ -1063,8 +1062,7 @@ describe("basic usage", function() {
it('should call the error callback if provided on non 2xx response (without data)', function() {
$httpBackend.expect('GET', '/CreditCard').respond(ERROR_CODE, ERROR_RESPONSE);
var ccs = CreditCard.get(callback, errorCB);
ccs.$promise.then(noop, noop);
CreditCard.get(callback, errorCB);
$httpBackend.flush();
expect(errorCB).toHaveBeenCalledOnce();
expect(callback).not.toHaveBeenCalled();
@@ -1564,7 +1562,6 @@ describe('cancelling requests', function() {
});
var ccs = CreditCard.get();
ccs.$promise.catch(noop);
ccs.$cancelRequest();
expect($httpBackend.flush).toThrow(new Error('No pending request to flush !'));
@@ -1584,7 +1581,6 @@ describe('cancelling requests', function() {
});
var ccs = CreditCard.get();
ccs.$promise.catch(noop);
ccs.$cancelRequest();
expect($httpBackend.flush).toThrow(new Error('No pending request to flush !'));