Skip to content

Commit e200748

Browse files
committed
Support abort API
1 parent 7a692dc commit e200748

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

fetch.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,21 @@
11
(function(self) {
22
'use strict';
33

4-
if (self.fetch) {
4+
function canAbortFetch() {
5+
if (!self.AbortController || !self.AbortSignal) {
6+
return false;
7+
}
8+
9+
var abortController = new self.AbortController();
10+
11+
var request = new self.Request('http://a', {
12+
signal: abortController.signal
13+
});
14+
15+
return Boolean(request.signal);
16+
}
17+
18+
if (self.fetch && canAbortFetch()) {
519
return
620
}
721

@@ -443,6 +457,10 @@
443457
reject(new TypeError('Network request failed'))
444458
}
445459

460+
xhr.onabort = function() {
461+
reject(new DOMException('Aborted', 'AbortError'))
462+
}
463+
446464
xhr.open(request.method, request.url, true)
447465

448466
if (request.credentials === 'include') {
@@ -459,6 +477,10 @@
459477
xhr.setRequestHeader(name, value)
460478
})
461479

480+
if (init.signal && init.signal.addEventListener) {
481+
init.signal.addEventListener('abort', xhr.cancel)
482+
}
483+
462484
xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)
463485
})
464486
}

0 commit comments

Comments
 (0)