From 2e6739c1a5a5cfb0318469d5975222f760627a4c Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Fri, 15 May 2026 13:26:50 -0700 Subject: [PATCH] Extract queue processing. --- src/lib/ledger/queue.ts | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/lib/ledger/queue.ts b/src/lib/ledger/queue.ts index c1de428..326775a 100644 --- a/src/lib/ledger/queue.ts +++ b/src/lib/ledger/queue.ts @@ -6,19 +6,23 @@ const queue: { task: Function, resolve: Function, reject: Function }[] = [] let isIdle: boolean = true /** -* Serially executes asynchronous functions. -*/ + * Serially executes asynchronous functions. + */ export async function enqueue (task: () => Promise): Promise { - const process = () => { - const next = queue.shift() - if (next == null) return isIdle = true - const { task, resolve, reject } = next - isIdle = !task - task?.().then(resolve).catch(reject).finally(process) - } if (typeof task !== 'function') throw new TypeError('task is not a function') - return new Promise((resolve, reject) => { + return new Promise((resolve, reject): void => { queue.push({ task, resolve, reject }) if (isIdle) process() }) } + +function process (): void { + const next = queue.shift() + if (next == null) { + isIdle = true + } else { + const { task, resolve, reject } = next + isIdle = !task + task?.().then(resolve).catch(reject).finally(process) + } +} -- 2.47.3