From: Chris Duncan Date: Fri, 15 May 2026 21:57:34 +0000 (-0700) Subject: Greatly simplify serial queue. X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=06de3aaa11871c7380f657f76be65095a55b9306;p=libnemo.git Greatly simplify serial queue. --- diff --git a/src/lib/ledger/queue.ts b/src/lib/ledger/queue.ts index 326775a..30560bf 100644 --- a/src/lib/ledger/queue.ts +++ b/src/lib/ledger/queue.ts @@ -1,28 +1,14 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -const queue: { task: Function, resolve: Function, reject: Function }[] = [] - -let isIdle: boolean = true +let job: Promise = Promise.resolve() /** - * Serially executes asynchronous functions. + * Serially executes sync and async functions. */ -export async function enqueue (task: () => Promise): Promise { +export function enqueue (task: () => T | Promise): Promise { if (typeof task !== 'function') throw new TypeError('task is not a function') - 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) - } + const result = job.then(() => task(), () => task()) + job = result.then(() => void 0, () => void 0) + return result }