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

Function waitForDeferreds

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

Source from the content-addressed store, hash-verified

316};
317
318const waitForDeferreds = async (
319 pendingDeferreds: ReadonlySet<QuickJSDeferredPromise>,
320 deadlineMs: number,
321 timeoutMs: number,
322): Promise<void> => {
323 const remainingMs = deadlineMs - Date.now();
324 if (remainingMs <= 0) {
325 throw new Error(timeoutMessage(timeoutMs));
326 }
327
328 let timer: ReturnType<typeof setTimeout> | undefined;
329 try {
330 await Promise.race([
331 Promise.race([...pendingDeferreds].map((deferred) => deferred.settled)),
332 new Promise<never>((_, reject) => {
333 timer = setTimeout(() => reject(new Error(timeoutMessage(timeoutMs))), remainingMs);
334 }),
335 ]);
336 } finally {
337 if (timer !== undefined) {
338 clearTimeout(timer);
339 }
340 }
341};
342
343const drainAsync = async (
344 context: QuickJSContext,

Callers 1

drainAsyncFunction · 0.85

Calls 2

timeoutMessageFunction · 0.85
rejectFunction · 0.85

Tested by

no test coverage detected