aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/service/http.js41
-rw-r--r--test/service/httpSpec.js30
2 files changed, 34 insertions, 37 deletions
diff --git a/src/service/http.js b/src/service/http.js
index 087c3809..f06b88fd 100644
--- a/src/service/http.js
+++ b/src/service/http.js
@@ -56,6 +56,8 @@ function transform(data, fns, param) {
* @requires $exceptionHandler
* @requires $cacheFactory
*
+ * @property {Array.<XhrFuture>} pendingRequests Array of pending requests.
+ *
* @description
*/
function $HttpProvider() {
@@ -89,28 +91,14 @@ function $HttpProvider() {
this.$get = ['$httpBackend', '$browser', '$exceptionHandler', '$cacheFactory', '$rootScope',
function($httpBackend, $browser, $exceptionHandler, $cacheFactory, $rootScope) {
- var cache = $cacheFactory('$http'),
- pendingRequestsCount = 0;
+ var cache = $cacheFactory('$http');
// the actual service
function $http(config) {
return new XhrFuture().retry(config);
}
- /**
- * @workInProgress
- * @ngdoc method
- * @name angular.service.$http#pendingCount
- * @methodOf angular.service.$http
- *
- * @description
- * Return number of pending requests
- *
- * @returns {number} Number of pending requests
- */
- $http.pendingCount = function() {
- return pendingRequestsCount;
- };
+ $http.pendingRequests = [];
/**
* @ngdoc method
@@ -236,12 +224,14 @@ function $HttpProvider() {
/**
* Represents Request object, returned by $http()
*
- * !!! ACCESS CLOSURE VARS: $httpBackend, $browser, $config, $log, $rootScope, cache, pendingRequestsCount
+ * !!! ACCESS CLOSURE VARS:
+ * $httpBackend, $browser, $config, $log, $rootScope, cache, $http.pendingRequests
*/
function XhrFuture() {
- var rawRequest, cfg = {}, callbacks = [],
+ var rawRequest, parsedHeaders,
+ cfg = {}, callbacks = [],
defHeaders = $config.headers,
- parsedHeaders;
+ self = this;
/**
* Callback registered to $httpBackend():
@@ -281,9 +271,11 @@ function $HttpProvider() {
response = transform(response, cfg.transformResponse || $config.transformResponse, rawRequest);
var regexp = statusToRegexp(status),
- pattern, callback;
+ pattern, callback, idx;
- pendingRequestsCount--;
+ // remove from pending requests
+ if ((idx = indexOf($http.pendingRequests, self)) !== -1)
+ $http.pendingRequests.splice(idx, 1);
// normalize internal statuses to 0
status = Math.max(status, 0);
@@ -372,7 +364,7 @@ function $HttpProvider() {
rawRequest = $httpBackend(cfg.method, cfg.url, data, done, headers, cfg.timeout);
}
- pendingRequestsCount++;
+ $http.pendingRequests.push(self);
return this;
};
@@ -423,6 +415,11 @@ function $HttpProvider() {
return this;
};
+
+ /**
+ * Configuration object of the request
+ */
+ this.config = cfg;
}
}];
}
diff --git a/test/service/httpSpec.js b/test/service/httpSpec.js
index 75e85359..ad83bdf8 100644
--- a/test/service/httpSpec.js
+++ b/test/service/httpSpec.js
@@ -862,54 +862,54 @@ describe('$http', function() {
});
- describe('pendingCount', function() {
+ describe('pendingRequests', function() {
- it('should return number of pending requests', function() {
+ it('should be an array of pending requests', function() {
$httpBackend.when('GET').then(200);
- expect($http.pendingCount()).toBe(0);
+ expect($http.pendingRequests.length).toBe(0);
$http({method: 'get', url: '/some'});
- expect($http.pendingCount()).toBe(1);
+ expect($http.pendingRequests.length).toBe(1);
$httpBackend.flush();
- expect($http.pendingCount()).toBe(0);
+ expect($http.pendingRequests.length).toBe(0);
});
- it('should decrement the counter when request aborted', function() {
+ it('should remove the request when aborted', function() {
$httpBackend.when('GET').then(0);
future = $http({method: 'get', url: '/x'});
- expect($http.pendingCount()).toBe(1);
+ expect($http.pendingRequests.length).toBe(1);
future.abort();
$httpBackend.flush();
- expect($http.pendingCount()).toBe(0);
+ expect($http.pendingRequests.length).toBe(0);
});
- it('should decrement the counter when served from cache', function() {
+ it('should remove the request when served from cache', function() {
$httpBackend.when('GET').then(200);
$http({method: 'get', url: '/cached', cache: true});
$httpBackend.flush();
- expect($http.pendingCount()).toBe(0);
+ expect($http.pendingRequests.length).toBe(0);
$http({method: 'get', url: '/cached', cache: true});
- expect($http.pendingCount()).toBe(1);
+ expect($http.pendingRequests.length).toBe(1);
$browser.defer.flush();
- expect($http.pendingCount()).toBe(0);
+ expect($http.pendingRequests.length).toBe(0);
});
- it('should decrement the counter before firing callbacks', function() {
+ it('should remove the request before firing callbacks', function() {
$httpBackend.when('GET').then(200);
$http({method: 'get', url: '/url'}).on('xxx', function() {
- expect($http.pendingCount()).toBe(0);
+ expect($http.pendingRequests.length).toBe(0);
});
- expect($http.pendingCount()).toBe(1);
+ expect($http.pendingRequests.length).toBe(1);
$httpBackend.flush();
});
});