Merge dependabot/npm_and_yarn/examples/typescript/http-server-pool/express-hybrid...
[poolifier.git] / src / utils.ts
index c92edc91de4f68100baefe6c5fd14ded17492363..6f9d1226bb71210b020d987b32d169bbd593b5b8 100644 (file)
@@ -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: unknown
+  // 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
+    }
+  }
+}