}
public static async sleep(milliSeconds: number): Promise<NodeJS.Timeout> {
- return new Promise((resolve) => setTimeout(resolve, milliSeconds));
+ return new Promise((resolve) => setTimeout(resolve as () => void, milliSeconds));
}
public static formatDurationMilliSeconds(duration: number): string {
throw new RangeError('Invalid interval');
}
const randomPositiveFloat = crypto.randomBytes(4).readUInt32LE() / 0xffffffff;
- const sign = (negative && randomPositiveFloat < 0.5) ? 1 : -1;
+ const sign = (negative && randomPositiveFloat < 0.5) ? -1 : 1;
return sign * (randomPositiveFloat * (max - min) + min);
}
- public static getRandomInt(max: number, min = 0): number {
+ public static getRandomInteger(max: number, min = 0): number {
if (max < 0) {
throw new RangeError('Invalid interval');
}
return Configuration.getWorkerProcess() === WorkerProcessType.DYNAMIC_POOL;
}
+ public static async promiseWithTimeout<T>(
+ promise: Promise<T>,
+ timeoutMs: number,
+ timeoutError: Error,
+ timeoutCallback: () => void = () => { /* This is intentional */ }
+ ): Promise<T> {
+ // Create a timeout promise that rejects in timeout milliseconds
+ const timeoutPromise = new Promise<never>((_, reject) => {
+ setTimeout(() => {
+ timeoutCallback();
+ reject(timeoutError);
+ }, timeoutMs);
+ });
+
+ // Returns a race between timeout promise and the passed promise
+ return Promise.race<T>([promise, timeoutPromise]);
+ }
+
/**
* Generate a cryptographically secure random number in the [0,1[ range
*