[Refactoring] Avoid redundant promise rejections

This commit is contained in:
Alexander Zinchuk 2022-05-30 15:40:25 +04:00
parent 3300d71e5d
commit cad0c76d39
2 changed files with 11 additions and 4 deletions

View File

@ -1149,11 +1149,14 @@ class TelegramClient {
} }
function timeout(cb, ms) { function timeout(cb, ms) {
let isResolved = false;
return Promise.race([ return Promise.race([
cb(), cb(),
Helpers.sleep(ms) Helpers.sleep(ms).then(() => isResolved ? undefined : Promise.reject(new Error('TIMEOUT'))),
.then(() => Promise.reject(new Error('TIMEOUT'))), ]).finally(() => {
]); isResolved = true;
});
} }
async function attempts(cb, times, pause) { async function attempts(cb, times, pause) {

View File

@ -34,15 +34,19 @@ export async function respondWithCache(e: FetchEvent) {
} }
async function withTimeout<T>(cb: () => Promise<T>, timeout: number) { async function withTimeout<T>(cb: () => Promise<T>, timeout: number) {
let isResolved = false;
try { try {
return await Promise.race([ return await Promise.race([
pause(timeout).then(() => Promise.reject(new Error('TIMEOUT'))), pause(timeout).then(() => (isResolved ? undefined : Promise.reject(new Error('TIMEOUT')))),
cb(), cb(),
]); ]);
} catch (err) { } catch (err) {
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.error(err); console.error(err);
return undefined; return undefined;
} finally {
isResolved = true;
} }
} }