summaryrefslogtreecommitdiff
path: root/ext/fetch/26_fetch.js
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2022-03-22 17:08:33 +0000
committerGitHub <noreply@github.com>2022-03-22 18:08:33 +0100
commitd2c099ce34bd46a002797c57d4bc76ddf0b2b119 (patch)
treeabc425347fdce23c0fa9d35a429138122ad8d28c /ext/fetch/26_fetch.js
parentf81334d5bd1df723b1543dd906bd5672808bc75f (diff)
fix(ext/fetch): Connect async error stack with user code (#13899)
Diffstat (limited to 'ext/fetch/26_fetch.js')
-rw-r--r--ext/fetch/26_fetch.js17
1 files changed, 15 insertions, 2 deletions
diff --git a/ext/fetch/26_fetch.js b/ext/fetch/26_fetch.js
index 711825985..b13552b02 100644
--- a/ext/fetch/26_fetch.js
+++ b/ext/fetch/26_fetch.js
@@ -409,8 +409,13 @@
* @param {RequestInit} init
*/
function fetch(input, init = {}) {
+ // There is an async dispatch later that causes a stack trace disconnect.
+ // We reconnect it by assigning the result of that dispatch to `opPromise`,
+ // awaiting `opPromise` in an inner function also named `fetch()` and
+ // returning the result from that.
+ let opPromise = undefined;
// 1.
- return new Promise((resolve, reject) => {
+ const result = new Promise((resolve, reject) => {
const prefix = "Failed to call 'fetch'";
webidl.requiredArguments(arguments.length, 1, { prefix });
// 2.
@@ -441,7 +446,7 @@
}
// 12.
- PromisePrototypeCatch(
+ opPromise = PromisePrototypeCatch(
PromisePrototypeThen(
mainFetch(request, false, requestObject.signal),
(response) => {
@@ -479,6 +484,14 @@
},
);
});
+ if (opPromise) {
+ PromisePrototypeCatch(result, () => {});
+ return (async function fetch() {
+ await opPromise;
+ return result;
+ })();
+ }
+ return result;
}
function abortFetch(request, responseObject, error) {