summaryrefslogtreecommitdiff
path: root/ext/fetch/26_fetch.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/fetch/26_fetch.js')
-rw-r--r--ext/fetch/26_fetch.js32
1 files changed, 21 insertions, 11 deletions
diff --git a/ext/fetch/26_fetch.js b/ext/fetch/26_fetch.js
index 5084fab34..6be63d077 100644
--- a/ext/fetch/26_fetch.js
+++ b/ext/fetch/26_fetch.js
@@ -201,6 +201,23 @@ async function mainFetch(req, recursive, terminator) {
let requestSendError;
let requestSendErrorSet = false;
+
+ async function propagateError(err, message) {
+ // TODO(lucacasonato): propagate error into response body stream
+ try {
+ await core.writeTypeError(requestBodyRid, message);
+ } catch (err) {
+ if (!requestSendErrorSet) {
+ requestSendErrorSet = true;
+ requestSendError = err;
+ }
+ }
+ if (!requestSendErrorSet) {
+ requestSendErrorSet = true;
+ requestSendError = err;
+ }
+ }
+
if (requestBodyRid !== null) {
if (
reqBody === null ||
@@ -220,9 +237,7 @@ async function mainFetch(req, recursive, terminator) {
val = res.value;
} catch (err) {
if (terminator.aborted) break;
- // TODO(lucacasonato): propagate error into response body stream
- requestSendError = err;
- requestSendErrorSet = true;
+ await propagateError(err, "failed to read");
break;
}
if (done) break;
@@ -231,9 +246,7 @@ async function mainFetch(req, recursive, terminator) {
"Item in request body ReadableStream is not a Uint8Array",
);
await reader.cancel(error);
- // TODO(lucacasonato): propagate error into response body stream
- requestSendError = error;
- requestSendErrorSet = true;
+ await propagateError(error, error.message);
break;
}
try {
@@ -241,9 +254,7 @@ async function mainFetch(req, recursive, terminator) {
} catch (err) {
if (terminator.aborted) break;
await reader.cancel(err);
- // TODO(lucacasonato): propagate error into response body stream
- requestSendError = err;
- requestSendErrorSet = true;
+ await propagateError(err, "failed to write");
break;
}
}
@@ -252,8 +263,7 @@ async function mainFetch(req, recursive, terminator) {
await core.shutdown(requestBodyRid);
} catch (err) {
if (!terminator.aborted) {
- requestSendError = err;
- requestSendErrorSet = true;
+ await propagateError(err, "failed to flush");
}
}
}