summaryrefslogtreecommitdiff
path: root/ext/fetch/23_request.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/fetch/23_request.js')
-rw-r--r--ext/fetch/23_request.js27
1 files changed, 23 insertions, 4 deletions
diff --git a/ext/fetch/23_request.js b/ext/fetch/23_request.js
index 70e00a874..873d05a2b 100644
--- a/ext/fetch/23_request.js
+++ b/ext/fetch/23_request.js
@@ -9,7 +9,7 @@
/// <reference path="./lib.deno_fetch.d.ts" />
/// <reference lib="esnext" />
-import { core, primordials } from "ext:core/mod.js";
+import { core, internals, primordials } from "ext:core/mod.js";
const {
ArrayPrototypeMap,
ArrayPrototypeSlice,
@@ -269,10 +269,20 @@ class Request {
/** @type {AbortSignal} */
get [_signal]() {
const signal = this[_signalCache];
- if (signal !== undefined) {
+ // This signal not been created yet, and the request is still in progress
+ if (signal === undefined) {
+ const signal = newSignal();
+ this[_signalCache] = signal;
return signal;
}
- return (this[_signalCache] = newSignal());
+ // This signal has not been created yet, but the request has already completed
+ if (signal === false) {
+ const signal = newSignal();
+ this[_signalCache] = signal;
+ signal[signalAbort](signalAbortError);
+ return signal;
+ }
+ return signal;
}
get [_mimeType]() {
const values = getDecodeSplitHeader(
@@ -593,11 +603,20 @@ const signalAbortError = new DOMException(
ObjectFreeze(signalAbortError);
function abortRequest(request) {
- if (request[_signal]) {
+ if (request[_signalCache] !== undefined) {
request[_signal][signalAbort](signalAbortError);
+ } else {
+ request[_signalCache] = false;
}
}
+function getCachedAbortSignal(request) {
+ return request[_signalCache];
+}
+
+// For testing
+internals.getCachedAbortSignal = getCachedAbortSignal;
+
export {
abortRequest,
fromInnerRequest,