]> git.codecow.com Git - libnemo.git/commitdiff
Extract queue processing.
authorChris Duncan <chris@zoso.dev>
Fri, 15 May 2026 20:26:50 +0000 (13:26 -0700)
committerChris Duncan <chris@zoso.dev>
Fri, 15 May 2026 20:26:50 +0000 (13:26 -0700)
src/lib/ledger/queue.ts

index c1de428bab57ba2870812bb02d639704bc892205..326775a6d2596b7eb0696a3e56c01fd9d49cee02 100644 (file)
@@ -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<T> (task: () => Promise<T>): Promise<T> {
-       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<T>((resolve, reject) => {
+       return new Promise<T>((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)
+       }
+}