JS API Reference

Module: shared/utils/eventLoop

Table of contents

Functions

Functions

runOnNextEventLoopIteration

runOnNextEventLoopIteration<T>(cb): Promise<T>

Run a callback on the next event loop iteration ("promote" a microtask to a task using setTimeout). Note that this is not guaranteed to run on the very next iteration, but it will run as soon as possible. This function is designed to avoid the problem of microtasks queueing other microtasks in an infinite loop. See the example below for a common pitfall that this function can help avoid. Learn more about microtasks and their relation to async/await here: https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide/In_depth https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#control_flow_effects_of_await

Type parameters

Name
T

Parameters

NameTypeDescription
cb() => Promise<T>The callback to run on the next event loop iteration.

Returns

Promise<T>

Example

const signal = AbortSignal.timeout(1_000);
// This loop will run for 1 second, then stop.
while (!signal.aborted) {
  await runOnNextEventLoopIteration(() => Promise.resolve());
}

const signal = AbortSignal.timeout(1_000);
// This loop will run indefinitely.
// Each while loop iteration queues a microtask, which itself queues another microtask, and so on.
while (!signal.aborted) {
  await Promise.resolve();
}

Defined in

src/shared/utils/eventLoop.ts:26

Was this helpful?