diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-12-24 06:04:32 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-24 13:04:32 +0000 |
commit | 92b2e28c6491f339124ec5851173ac0aaef93908 (patch) | |
tree | 3910827b2772379054c15c4c3f133175138baf36 /ext/web/02_timers.js | |
parent | 1297c9a8f379d89691522c5cc0c6071c479e95a1 (diff) |
chore: ensure that each op provided to ensureFastOps is only used once (#21689)
When we migrate to op-import-per-extension, we will want to ensure that
ops have one and only one place where they are imported. This tackles
the ops that are imported via `ensureFastOps`, but does not yet tackle
direct `ops` imports.
Landing ahead of https://github.com/denoland/deno_core/pull/393
Diffstat (limited to 'ext/web/02_timers.js')
-rw-r--r-- | ext/web/02_timers.js | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/ext/web/02_timers.js b/ext/web/02_timers.js index 27a9fcbde..c7dc90c82 100644 --- a/ext/web/02_timers.js +++ b/ext/web/02_timers.js @@ -386,9 +386,17 @@ function unrefTimer(id) { core.unrefOpPromise(timerInfo.promise); } +// Defer to avoid starving the event loop. Not using queueMicrotask() +// for that reason: it lets promises make forward progress but can +// still starve other parts of the event loop. +function defer(go) { + PromisePrototypeThen(op_void_async_deferred(), () => go()); +} + export { clearInterval, clearTimeout, + defer, handleTimerMacrotask, opNow, refTimer, |