X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Futils.ts;h=7927c9738c39d2ad1a417e4a2afdc552ece34caa;hb=c3f0a07446e3751eed1df850525672f75562429f;hp=c92edc91de4f68100baefe6c5fd14ded17492363;hpb=8990357d855c45cd0063f24092bb58b4163ddb0a;p=poolifier.git diff --git a/src/utils.ts b/src/utils.ts index c92edc91..7927c973 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -58,21 +58,21 @@ export const availableParallelism = (): number => { return availableParallelism } -/** - * Computes the retry delay in milliseconds using an exponential back off algorithm. - * - * @param retryNumber - The number of retries that have already been attempted - * @param maxDelayRatio - The maximum ratio of the delay that can be randomized - * @returns Delay in milliseconds - */ -export const exponentialDelay = ( - retryNumber = 0, - maxDelayRatio = 0.2 -): number => { - const delay = Math.pow(2, retryNumber) * 100 - const randomSum = delay * maxDelayRatio * Math.random() // 0-(maxDelayRatio*100)% of the delay - return delay + randomSum -} +// /** +// * Computes the retry delay in milliseconds using an exponential back off algorithm. +// * +// * @param retryNumber - The number of retries that have already been attempted +// * @param maxDelayRatio - The maximum ratio of the delay that can be randomized +// * @returns Delay in milliseconds +// */ +// export const exponentialDelay = ( +// retryNumber = 0, +// maxDelayRatio = 0.2 +// ): number => { +// const delay = Math.pow(2, retryNumber) * 100 +// const randomSum = delay * maxDelayRatio * Math.random() // 0-(maxDelayRatio*100)% of the delay +// return delay + randomSum +// } /** * Computes the median of the given data set. @@ -182,3 +182,27 @@ export const updateMeasurementStatistics = ( } } } + +/** + * Executes a function once at a time. + * + * @param fn - The function to execute. + * @param context - The context to bind the function to. + * @returns The function to execute. + */ +export const once = ( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + fn: (...args: any[]) => void, + context = this + // eslint-disable-next-line @typescript-eslint/no-explicit-any +): ((...args: any[]) => void) => { + let called = false + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return function (...args: any[]): void { + if (!called) { + called = true + fn.apply(context, args) + called = false + } + } +}