Ensure busy wait does not end before promise fullfiling
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 28 Nov 2022 22:17:15 +0000 (23:17 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 28 Nov 2022 22:17:15 +0000 (23:17 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
busy-wait.js

index 9d0d31b4d6ee0285a9fe7fcd19a54e96e17de913..66d58967ed9e86c0cf00b61708379dc46f2e0be4 100644 (file)
@@ -15,11 +15,12 @@ function dummyTimeoutBusyWait (timeoutMs) {
 
 /**
  * @param timeoutMs
+ * @param intervalMs
  */
-async function sleepTimeoutBusyWait (timeoutMs) {
+async function sleepTimeoutBusyWait (timeoutMs, intervalMs = interval) {
   const timeoutTimestampMs = Date.now() + timeoutMs
   do {
-    await sleep(interval)
+    await sleep(intervalMs)
   } while (Date.now() < timeoutTimestampMs)
 }
 
@@ -43,13 +44,14 @@ async function divideAndConquerTimeoutBusyWait (
  * @param timeoutMs
  * @param intervalMs
  */
-function setIntervalTimeoutBusyWait (timeoutMs, intervalMs = interval) {
+async function setIntervalTimeoutBusyWait (timeoutMs, intervalMs = interval) {
   const tries = Math.round(timeoutMs / intervalMs)
   let count = 0
   const triesSetInterval = setInterval(() => {
     count++
     if (count === tries) {
       clearInterval(triesSetInterval)
+      return Promise.resolve()
     }
   }, intervalMs)
 }
@@ -65,8 +67,8 @@ Benchmark.suite(
   Benchmark.add('divideAndConquerTimeoutBusyWait', async () => {
     await divideAndConquerTimeoutBusyWait(timeout)
   }),
-  Benchmark.add('setIntervalTimeoutBusyWait', () => {
-    setIntervalTimeoutBusyWait(timeout)
+  Benchmark.add('setIntervalTimeoutBusyWait', async () => {
+    await setIntervalTimeoutBusyWait(timeout)
   }),
   Benchmark.cycle(),
   Benchmark.complete(),