From 6a960ec00e9627f59631510035cbf1ca223f84c0 Mon Sep 17 00:00:00 2001 From: Almar Date: Fri, 28 May 2021 14:47:17 +0200 Subject: [PATCH 1/5] Abort fetch before retry --- src/fetch.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/fetch.ts b/src/fetch.ts index 162ea45..949ffe9 100644 --- a/src/fetch.ts +++ b/src/fetch.ts @@ -100,6 +100,9 @@ export function fetchEventSource(input: RequestInfo, { const fetch = inputFetch ?? window.fetch; const onopen = inputOnOpen ?? defaultOnOpen; async function create() { + if (curRequestController) { + curRequestController.abort(); + } curRequestController = new AbortController(); try { const response = await fetch(input, { From 0c7d109f5c8ec1b4fe412a84f245c9d9c56e6d41 Mon Sep 17 00:00:00 2001 From: Almar Date: Fri, 28 May 2021 15:00:41 +0200 Subject: [PATCH 2/5] Make fetchEventSource work in web worker --- src/fetch.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/fetch.ts b/src/fetch.ts index 949ffe9..d6612fb 100644 --- a/src/fetch.ts +++ b/src/fetch.ts @@ -74,20 +74,20 @@ export function fetchEventSource(input: RequestInfo, { let curRequestController: AbortController; function onVisibilityChange() { curRequestController.abort(); // close existing request on every visibility change - if (!document.hidden) { + if (!self.document?.hidden) { create(); // page is now visible again, recreate request. } } - if (!openWhenHidden) { - document.addEventListener('visibilitychange', onVisibilityChange); + if (self.document && !openWhenHidden) { + self.document?.addEventListener('visibilitychange', onVisibilityChange); } let retryInterval = DefaultRetryInterval; let retryTimer = 0; function dispose() { - document.removeEventListener('visibilitychange', onVisibilityChange); - window.clearTimeout(retryTimer); + self.document?.removeEventListener('visibilitychange', onVisibilityChange); + self.clearTimeout(retryTimer); curRequestController.abort(); } @@ -97,7 +97,7 @@ export function fetchEventSource(input: RequestInfo, { resolve(); // don't waste time constructing/logging errors }); - const fetch = inputFetch ?? window.fetch; + const fetch = inputFetch ?? self.fetch; const onopen = inputOnOpen ?? defaultOnOpen; async function create() { if (curRequestController) { @@ -134,8 +134,8 @@ export function fetchEventSource(input: RequestInfo, { try { // check if we need to retry: const interval: any = onerror?.(err) ?? retryInterval; - window.clearTimeout(retryTimer); - retryTimer = window.setTimeout(create, interval); + self.clearTimeout(retryTimer); + retryTimer = self.setTimeout(create, interval); } catch (innerErr) { // we should not retry anymore: dispose(); From 425f97b2c2814ec96a021a9621bf437da9111e87 Mon Sep 17 00:00:00 2001 From: Almar Date: Fri, 28 May 2021 15:27:35 +0200 Subject: [PATCH 3/5] Abort fetch before retry --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 90ea2f6..fd9a317 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/fetch-event-source", - "version": "2.0.1", + "version": "2.0.2", "description": "A better API for making Event Source requests, with all the features of fetch()", "homepage": "https://github.com/Azure/fetch-event-source#readme", "repository": "github:Azure/fetch-event-source", From 361f67db8ec412ea4b9b7d18f66110dbd9f2badd Mon Sep 17 00:00:00 2001 From: Almar Date: Fri, 28 May 2021 15:27:35 +0200 Subject: [PATCH 4/5] Abort fetch before retry --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 90ea2f6..8528735 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/fetch-event-source", - "version": "2.0.1", + "version": "2.0.3", "description": "A better API for making Event Source requests, with all the features of fetch()", "homepage": "https://github.com/Azure/fetch-event-source#readme", "repository": "github:Azure/fetch-event-source", From 4ded4d4f5b215b938d7223398d6f2be6473a4c27 Mon Sep 17 00:00:00 2001 From: Almar Date: Wed, 21 Dec 2022 19:25:56 +0100 Subject: [PATCH 5/5] Replace `self` with `globalThis` --- src/fetch.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/fetch.ts b/src/fetch.ts index d6612fb..1e2236c 100644 --- a/src/fetch.ts +++ b/src/fetch.ts @@ -74,20 +74,20 @@ export function fetchEventSource(input: RequestInfo, { let curRequestController: AbortController; function onVisibilityChange() { curRequestController.abort(); // close existing request on every visibility change - if (!self.document?.hidden) { + if (!globalThis.document?.hidden) { create(); // page is now visible again, recreate request. } } - if (self.document && !openWhenHidden) { - self.document?.addEventListener('visibilitychange', onVisibilityChange); + if (globalThis.document && !openWhenHidden) { + globalThis.document?.addEventListener('visibilitychange', onVisibilityChange); } let retryInterval = DefaultRetryInterval; let retryTimer = 0; function dispose() { - self.document?.removeEventListener('visibilitychange', onVisibilityChange); - self.clearTimeout(retryTimer); + globalThis.document?.removeEventListener('visibilitychange', onVisibilityChange); + globalThis.clearTimeout(retryTimer); curRequestController.abort(); } @@ -97,7 +97,7 @@ export function fetchEventSource(input: RequestInfo, { resolve(); // don't waste time constructing/logging errors }); - const fetch = inputFetch ?? self.fetch; + const fetch = inputFetch ?? globalThis.fetch; const onopen = inputOnOpen ?? defaultOnOpen; async function create() { if (curRequestController) { @@ -134,8 +134,8 @@ export function fetchEventSource(input: RequestInfo, { try { // check if we need to retry: const interval: any = onerror?.(err) ?? retryInterval; - self.clearTimeout(retryTimer); - retryTimer = self.setTimeout(create, interval); + globalThis.clearTimeout(retryTimer); + retryTimer = globalThis.setTimeout(create, interval); } catch (innerErr) { // we should not retry anymore: dispose();