From cad0c76d390ad4df19f2062c086656069fb93161 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Mon, 30 May 2022 15:40:25 +0400 Subject: [PATCH] [Refactoring] Avoid redundant promise rejections --- src/lib/gramjs/client/TelegramClient.js | 9 ++++++--- src/serviceWorker/assetCache.ts | 6 +++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/lib/gramjs/client/TelegramClient.js b/src/lib/gramjs/client/TelegramClient.js index 4a479797b..325e555df 100644 --- a/src/lib/gramjs/client/TelegramClient.js +++ b/src/lib/gramjs/client/TelegramClient.js @@ -1149,11 +1149,14 @@ class TelegramClient { } function timeout(cb, ms) { + let isResolved = false; + return Promise.race([ cb(), - Helpers.sleep(ms) - .then(() => Promise.reject(new Error('TIMEOUT'))), - ]); + Helpers.sleep(ms).then(() => isResolved ? undefined : Promise.reject(new Error('TIMEOUT'))), + ]).finally(() => { + isResolved = true; + }); } async function attempts(cb, times, pause) { diff --git a/src/serviceWorker/assetCache.ts b/src/serviceWorker/assetCache.ts index 3d15ceb59..90a624886 100644 --- a/src/serviceWorker/assetCache.ts +++ b/src/serviceWorker/assetCache.ts @@ -34,15 +34,19 @@ export async function respondWithCache(e: FetchEvent) { } async function withTimeout(cb: () => Promise, timeout: number) { + let isResolved = false; + try { return await Promise.race([ - pause(timeout).then(() => Promise.reject(new Error('TIMEOUT'))), + pause(timeout).then(() => (isResolved ? undefined : Promise.reject(new Error('TIMEOUT')))), cb(), ]); } catch (err) { // eslint-disable-next-line no-console console.error(err); return undefined; + } finally { + isResolved = true; } }