Spaces:
Runtime error
Runtime error
File size: 1,226 Bytes
4327358 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
/**
* An errors which gets raised when the timeout
* exceeded
*
* @internal
*/
export class TimeoutError extends Error {}
/**
* Executes a promise in the given timeout. If the promise
* does not finish in the given timeout, it will
* raise a TimeoutError
*
* @param {number} ms The timeout in milliseconds
* @param {Promise<any>} promise The promise which should get executed
*
* @internal
*/
export const promiseTimeout = function (
ms: number,
promise: Promise<any>,
): Promise<any> {
let timer: NodeJS.Timeout;
return Promise.race([
promise,
new Promise(
(_, reject) =>
(timer = setTimeout(
() => reject(new TimeoutError(`Timed out in ${ms}ms.`)),
ms,
)),
),
]).finally(() => clearTimeout(timer));
};
export async function sleep(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export async function waitUntil(
condition: () => Promise<boolean>,
everyMs: number,
timeoutMs: number,
): Promise<boolean> {
const startTime = Date.now();
let result = await condition();
while (!result && Date.now() - startTime < timeoutMs) {
await sleep(everyMs);
result = await condition();
}
return result;
}
|