diff options
Diffstat (limited to 'ext/fetch/26_fetch.js')
-rw-r--r-- | ext/fetch/26_fetch.js | 32 |
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"); } } } |