From d62357269ae6b0e966467b5eccba2a605e59afdb Mon Sep 17 00:00:00 2001 From: Michael Peyper Date: Sun, 19 Sep 2021 23:16:58 +1000 Subject: [PATCH] refactor(async-utils): only advance timers on a single timeoutController --- src/core/asyncUtils.ts | 4 ++-- src/helpers/createTimeoutController.ts | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/core/asyncUtils.ts b/src/core/asyncUtils.ts index d0d4b12a..1aa2854f 100644 --- a/src/core/asyncUtils.ts +++ b/src/core/asyncUtils.ts @@ -23,11 +23,11 @@ function asyncUtils(act: Act, addResolver: (callback: () => void) => void): Asyn return callbackResult ?? callbackResult === undefined } - const timeoutController = createTimeoutController(timeout, { allowFakeTimers: !interval }) + const timeoutController = createTimeoutController(timeout, { allowFakeTimers: true }) const waitForResult = async () => { while (true) { - const intervalController = createTimeoutController(interval, { allowFakeTimers: true }) + const intervalController = createTimeoutController(interval) timeoutController.onTimeout(() => intervalController.cancel()) await intervalController.wrap(new Promise(addResolver)) diff --git a/src/helpers/createTimeoutController.ts b/src/helpers/createTimeoutController.ts index 0fafe277..6a5bda2a 100644 --- a/src/helpers/createTimeoutController.ts +++ b/src/helpers/createTimeoutController.ts @@ -1,12 +1,10 @@ import { fakeTimersAreEnabled, advanceTimers } from './fakeTimers' -function createTimeoutController(timeout: number | false, options: { allowFakeTimers: boolean }) { +function createTimeoutController(timeout: number | false, { allowFakeTimers = false } = {}) { let timeoutId: NodeJS.Timeout const timeoutCallbacks: Array<() => void> = [] let finished = false - const { allowFakeTimers } = options - const timeoutController = { onTimeout(callback: () => void) { timeoutCallbacks.push(callback) @@ -23,7 +21,7 @@ function createTimeoutController(timeout: number | false, options: { allowFakeTi resolve() }, timeout) } - + if (fakeTimersAreEnabled() && allowFakeTimers) { advanceTimers(() => finished) }