diff --git a/src/api/gramjs/worker/provider.ts b/src/api/gramjs/worker/provider.ts index f89bf9be3..b947793ad 100644 --- a/src/api/gramjs/worker/provider.ts +++ b/src/api/gramjs/worker/provider.ts @@ -170,10 +170,13 @@ function setupIosHealthCheck() { } async function ensureWorkerPing() { + let isResolved = false; + try { await Promise.race([ makeRequest({ type: 'ping' }), - pause(HEALTH_CHECK_TIMEOUT).then(() => Promise.reject(new Error('HEALTH_CHECK_TIMEOUT'))), + pause(HEALTH_CHECK_TIMEOUT) + .then(() => (isResolved ? undefined : Promise.reject(new Error('HEALTH_CHECK_TIMEOUT')))), ]); } catch (err) { // eslint-disable-next-line no-console @@ -182,5 +185,7 @@ async function ensureWorkerPing() { if (Date.now() - startedAt >= HEALTH_CHECK_MIN_DELAY) { window.location.reload(); } + } finally { + isResolved = true; } } diff --git a/src/serviceWorker/progressive.ts b/src/serviceWorker/progressive.ts index fdd817230..2e298037e 100644 --- a/src/serviceWorker/progressive.ts +++ b/src/serviceWorker/progressive.ts @@ -152,8 +152,9 @@ export async function requestPart( const messageId = generateIdFor(requestStates); const requestState = {} as RequestStates; + let isResolved = false; const promise = Promise.race([ - pause(PART_TIMEOUT).then(() => Promise.reject(new Error('ERROR_PART_TIMEOUT'))), + pause(PART_TIMEOUT).then(() => (isResolved ? undefined : Promise.reject(new Error('ERROR_PART_TIMEOUT')))), new Promise((resolve, reject) => { Object.assign(requestState, { resolve, reject }); }), @@ -164,6 +165,7 @@ export async function requestPart( .catch(() => undefined) .finally(() => { requestStates.delete(messageId); + isResolved = true; }); client.postMessage({