From: Chris Duncan Date: Fri, 15 May 2026 20:26:50 +0000 (-0700) Subject: Extract queue processing. X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=2e6739c1a5a5cfb0318469d5975222f760627a4c;p=libnemo.git Extract queue processing. --- 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) + } +}