From 1fc383be4b119246dc63272bfd276ee3b38b4605 Mon Sep 17 00:00:00 2001 From: Chirag Bhatia Date: Sun, 16 Jul 2017 00:37:48 +0530 Subject: [PATCH 1/2] fix($resource): Check if timeoutDeferred is null inside $cancelRequest --- src/ngResource/resource.js | 4 +++- test/ngResource/resourceSpec.js | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js index 054fb2523ac6..b90068e1438e 100644 --- a/src/ngResource/resource.js +++ b/src/ngResource/resource.js @@ -823,7 +823,9 @@ angular.module('ngResource', ['ng']). function cancelRequest(value) { promise.catch(noop); - timeoutDeferred.resolve(value); + if (timeoutDeferred !== null) { + timeoutDeferred.resolve(value); + } } }; diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index bc8bbd079642..1bfd45777295 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -2101,6 +2101,28 @@ describe('cancelling requests', function() { expect(creditCard.$cancelRequest).toBe(noop); }); + + it('should not break when calling old `$cancelRequest` after the response arrives', function() { + $httpBackend.whenGET('/CreditCard').respond({}); + + var CreditCard = $resource('/CreditCard', {}, { + get: { + method: 'GET', + cancellable: true + } + }); + + var creditCard = CreditCard.get(); + var cancelRequest = creditCard.$cancelRequest; + + creditCard.$promise.then(function(list) { + cancelRequest(); + }); + + $httpBackend.flush(); + + expect(creditCard.$cancelRequest).not.toThrow(); + }); }); describe('configuring `cancellable` on the provider', function() { From 73d97713a9e8787750888a91c42e4fb035dd0c51 Mon Sep 17 00:00:00 2001 From: Chirag Bhatia Date: Wed, 26 Jul 2017 20:00:49 +0530 Subject: [PATCH 2/2] fix($resource): Check if timeoutDeferred is null inside $cancelRequest --- test/ngResource/resourceSpec.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js index 1bfd45777295..65f4e893aa91 100644 --- a/test/ngResource/resourceSpec.js +++ b/test/ngResource/resourceSpec.js @@ -2115,13 +2115,10 @@ describe('cancelling requests', function() { var creditCard = CreditCard.get(); var cancelRequest = creditCard.$cancelRequest; - creditCard.$promise.then(function(list) { - cancelRequest(); - }); - $httpBackend.flush(); - expect(creditCard.$cancelRequest).not.toThrow(); + expect(cancelRequest).not.toBe(noop); + expect(cancelRequest).not.toThrow(); }); });