From 232f8861a00650f263656f5c9e53f0c35579bdea Mon Sep 17 00:00:00 2001 From: Koyomi Araragi Date: Sat, 5 Oct 2024 00:38:36 -0300 Subject: [PATCH] feat: support abort signal for fetch calls --- sdk/utils.ts | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/sdk/utils.ts b/sdk/utils.ts index 59c8a08..07a4c0d 100644 --- a/sdk/utils.ts +++ b/sdk/utils.ts @@ -46,37 +46,24 @@ export const retryFetch = ( url: string, fetchOptions: RequestInit, retries: number = 3, - timeout: number = 10 // set an overall timeout for this function + timeoutMs: number = 10 // set an overall timeout for this function ): Promise => { return new Promise((resolve, reject) => { const retryWrapper = (n: number) => { - requestWrapper() - .then(res => resolve(res)) - .catch(async err => { - if (n > 0) { - await delay(1000); - retryWrapper(--n); - } else { - reject(err); - } - }); - }; - - const requestWrapper = (): Promise => { - return new Promise((resolve, reject) => { - let timeoutId: NodeJS.Timeout; - if (timeout) { - timeoutId = setTimeout(() => reject('error: timeout'), timeout); + fetch(url, { + ...fetchOptions, + signal: AbortSignal.timeout(timeoutMs) + }) + .then(res => resolve(res)) + .catch(async err => { + if (n > 0) { + await delay(1000); + retryWrapper(--n); + } else { + reject(err); } - return fetch(url, fetchOptions) - .then(res => resolve(res)) - .catch(err => reject(err)) - .finally(() => { - if (timeoutId) { - clearTimeout(timeoutId); - } - }); }); + }; retryWrapper(retries);