X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils%2FUtils.ts;h=58e9094c7a601bcd587cf59e6fd79b32a8823b95;hb=5f742aac345f2eb8897c24651d00c7fb43dabbf8;hp=1a93669dbc334f4b7c2b1d18bd7f049d0625cc4f;hpb=85cce27f97abb607fbc4a2c4c6b335680dd65c2b;p=e-mobility-charging-stations-simulator.git diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 1a93669d..58e9094c 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -280,12 +280,12 @@ export const insertAt = (str: string, subStr: string, pos: number): string => * Computes the retry delay in milliseconds using an exponential backoff algorithm. * * @param retryNumber - the number of retries that have already been attempted - * @param maxDelayRatio - the maximum ratio of the delay that can be randomized + * @param delayFactor - the base delay factor in milliseconds * @returns delay in milliseconds */ -export const exponentialDelay = (retryNumber = 0, maxDelayRatio = 0.2): number => { - const delay = Math.pow(2, retryNumber) * 100; - const randomSum = delay * maxDelayRatio * secureRandom(); // 0-(maxDelayRatio*100)% of the delay +export const exponentialDelay = (retryNumber = 0, delayFactor = 100): number => { + const delay = Math.pow(2, retryNumber) * delayFactor; + const randomSum = delay * 0.2 * secureRandom(); // 0-20% of the delay return delay + randomSum; }; @@ -382,3 +382,18 @@ export const isArraySorted = (array: T[], compareFn: (a: T, b: T) => number): } return true; }; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const once = ( + fn: (...args: A) => R, + context: T, +): ((...args: A) => R) => { + let result: R; + return (...args: A) => { + if (fn) { + result = fn.apply(context, args); + (fn as unknown as undefined) = (context as unknown as undefined) = undefined; + } + return result; + }; +};