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

Function waitForDeferreds

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

Source from the content-addressed store, hash-verified

366};
367
368const waitForDeferreds = async (
369 pendingDeferreds: ReadonlySet<QuickJSDeferredPromise>,
370 deadline: DeadlineTracker,
371 timeoutMs: number,
372): Promise<void> => {
373 const settled = Promise.race([...pendingDeferreds].map((deferred) => deferred.settled));
374 const deadlineMs = deadline.deadlineMs();
375 if (deadlineMs === null) {
376 await settled;
377 return;
378 }
379
380 const remainingMs = deadlineMs - Date.now();
381 if (remainingMs <= 0) {
382 throw new Error(timeoutMessage(timeoutMs));
383 }
384
385 let timer: ReturnType<typeof setTimeout> | undefined;
386 try {
387 await Promise.race([
388 settled,
389 new Promise<never>((_, reject) => {
390 timer = setTimeout(() => reject(new Error(timeoutMessage(timeoutMs))), remainingMs);
391 }),
392 ]);
393 } finally {
394 if (timer !== undefined) {
395 clearTimeout(timer);
396 }
397 }
398};
399
400const drainAsync = async (
401 context: QuickJSContext,

Callers 1

drainAsyncFunction · 0.85

Calls 2

timeoutMessageFunction · 0.85
rejectFunction · 0.85

Tested by

no test coverage detected