MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / waitForDeferreds

Function waitForDeferreds

packages/kernel/runtime-quickjs/src/index.ts:328–351  ·  view source on GitHub ↗
(
  pendingDeferreds: ReadonlySet<QuickJSDeferredPromise>,
  deadlineMs: number,
  timeoutMs: number,
)

Source from the content-addressed store, hash-verified

326};
327
328const waitForDeferreds = async (
329 pendingDeferreds: ReadonlySet<QuickJSDeferredPromise>,
330 deadlineMs: number,
331 timeoutMs: number,
332): Promise<void> => {
333 const remainingMs = deadlineMs - Date.now();
334 if (remainingMs <= 0) {
335 throw new Error(timeoutMessage(timeoutMs));
336 }
337
338 let timer: ReturnType<typeof setTimeout> | undefined;
339 try {
340 await Promise.race([
341 Promise.race([...pendingDeferreds].map((deferred) => deferred.settled)),
342 new Promise<never>((_, reject) => {
343 timer = setTimeout(() => reject(new Error(timeoutMessage(timeoutMs))), remainingMs);
344 }),
345 ]);
346 } finally {
347 if (timer !== undefined) {
348 clearTimeout(timer);
349 }
350 }
351};
352
353const drainAsync = async (
354 context: QuickJSContext,

Callers 1

drainAsyncFunction · 0.85

Calls 2

timeoutMessageFunction · 0.85
rejectFunction · 0.85

Tested by

no test coverage detected