aboutsummaryrefslogtreecommitdiffstats
path: root/src/ng/httpBackend.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/ng/httpBackend.js')
-rw-r--r--src/ng/httpBackend.js17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/ng/httpBackend.js b/src/ng/httpBackend.js
index 69ac5976..ed8404f9 100644
--- a/src/ng/httpBackend.js
+++ b/src/ng/httpBackend.js
@@ -107,20 +107,25 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument,
}
if (timeout > 0) {
- var timeoutId = $browserDefer(function() {
- status = -1;
- jsonpDone && jsonpDone();
- xhr && xhr.abort();
- }, timeout);
+ var timeoutId = $browserDefer(timeoutRequest, timeout);
+ } else if (timeout && timeout.then) {
+ timeout.then(timeoutRequest);
}
+ function timeoutRequest() {
+ status = -1;
+ jsonpDone && jsonpDone();
+ xhr && xhr.abort();
+ }
+
function completeRequest(callback, status, response, headersString) {
// URL_MATCH is defined in src/service/location.js
var protocol = (url.match(SERVER_MATCH) || ['', locationProtocol])[1];
- // cancel timeout
+ // cancel timeout and subsequent timeout promise resolution
timeoutId && $browserDefer.cancel(timeoutId);
+ jsonpDone = xhr = null;
// fix status code for file protocol (it's always 0)
status = (protocol == 'file') ? (response ? 200 : 404) : status;