diff options
author | Marvin Hagemeister <marvin@deno.com> | 2024-07-31 12:00:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-31 12:00:01 +0200 |
commit | 1e2581e57b46e5e7512ceb5637d6007db67c3ed4 (patch) | |
tree | c084c0233e9e55810d5ca0ff858d1346f1b2e899 | |
parent | cd59fc53a528603112addfe8b10fe4e30d04e7f0 (diff) |
fix(node/timers/promises): add scheduler APIs (#24802)
This PR adds the experimental `scheduler` APIs in Node's
`timers/promises` module. See
https://nodejs.org/api/timers.html#timerspromisesschedulerwaitdelay-options
Fixes https://github.com/denoland/deno/issues/24800
-rw-r--r-- | ext/node/polyfills/timers/promises.ts | 7 | ||||
-rw-r--r-- | tests/unit_node/timers_test.ts | 23 |
2 files changed, 30 insertions, 0 deletions
diff --git a/ext/node/polyfills/timers/promises.ts b/ext/node/polyfills/timers/promises.ts index b01b343df..2ab2384dc 100644 --- a/ext/node/polyfills/timers/promises.ts +++ b/ext/node/polyfills/timers/promises.ts @@ -6,6 +6,13 @@ export const setTimeout = promisify(timers.setTimeout), setImmediate = promisify(timers.setImmediate), setInterval = promisify(timers.setInterval); +export const scheduler = { + async wait(delay: number, options?: { signal?: AbortSignal }): Promise<void> { + return await setTimeout(delay, undefined, options); + }, + yield: setImmediate, +}; + export default { setTimeout, setImmediate, diff --git a/tests/unit_node/timers_test.ts b/tests/unit_node/timers_test.ts index 90c6fb150..868ba21d6 100644 --- a/tests/unit_node/timers_test.ts +++ b/tests/unit_node/timers_test.ts @@ -66,6 +66,29 @@ Deno.test("[node/timers/promises setTimeout]", () => { return p; }); +Deno.test("[node/timers/promises scheduler.wait]", async () => { + const { scheduler } = timersPromises; + let resolved = false; + timers.setTimeout(() => (resolved = true), 20); + const p = scheduler.wait(20); + + assert(p instanceof Promise); + await p; + assert(resolved); +}); + +Deno.test("[node/timers/promises scheduler.yield]", async () => { + const { scheduler } = timersPromises; + let resolved = false; + timers.setImmediate(() => resolved = true); + + const p = scheduler.yield(); + assert(p instanceof Promise); + await p; + + assert(resolved); +}); + // Regression test for https://github.com/denoland/deno/issues/17981 Deno.test("[node/timers refresh cancelled timer]", () => { const { setTimeout, clearTimeout } = timers; |