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

Function waitForDeferreds

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

Source from the content-addressed store, hash-verified

386};
387
388const waitForDeferreds = async (
389 pendingDeferreds: ReadonlySet<QuickJSDeferredPromise>,
390 deadline: DeadlineTracker,
391 timeoutMs: number,
392): Promise<void> => {
393 const settled = Promise.race([...pendingDeferreds].map((deferred) => deferred.settled));
394 const deadlineMs = deadline.deadlineMs();
395 if (deadlineMs === null) {
396 await settled;
397 return;
398 }
399
400 const remainingMs = deadlineMs - Date.now();
401 if (remainingMs <= 0) {
402 throw new Error(timeoutMessage(timeoutMs));
403 }
404
405 let timer: ReturnType<typeof setTimeout> | undefined;
406 try {
407 await Promise.race([
408 settled,
409 new Promise<never>((_, reject) => {
410 timer = setTimeout(() => reject(new Error(timeoutMessage(timeoutMs))), remainingMs);
411 }),
412 ]);
413 } finally {
414 if (timer !== undefined) {
415 clearTimeout(timer);
416 }
417 }
418};
419
420const drainAsync = async (
421 context: QuickJSContext,

Callers 1

drainAsyncFunction · 0.85

Calls 2

timeoutMessageFunction · 0.85
rejectFunction · 0.85

Tested by

no test coverage detected