@oazmi/esbuild-plugin-deno - v0.4.0
    Preparing search index...

    Function syncTaskQueueFactory

    • a factory function that generates a synchronous task queuer, which ensures that the task-functions it receives are executed sequentially, one after the other, in the order they were enqueued.

      TODO: consider adding this utility function to @oazmi/kitchensink/lambda, or the planned @oazmi/kitchensink/duty or @oazmi/kitchensink/obligate.

      Returns SyncTaskQueue

      see SyncTaskQueue for the return type, and check out the example below.

      import { assert } from "jsr:@std/assert"

      // some utility functions
      const
      getTime = () => (performance.now()),
      assertBetween = (value: number, min: number, max: number) => (assert(value >= min && value <= max)),
      promiseTimeout = (wait_time_ms: number): Promise<void> => {
      return new Promise((resolve, reject) => { setTimeout(resolve, wait_time_ms) })
      }

      const
      my_task_queue = syncTaskQueueFactory(),
      start_time = getTime()

      const
      task1 = my_task_queue(promiseTimeout, 500),
      task2 = my_task_queue(promiseTimeout, 500),
      task3 = my_task_queue(promiseTimeout, 500),
      task4 = my_task_queue((value: string) => (value + " world"), "hello"),
      task5 = my_task_queue(async (value: string) => (value + " world"), "bye bye")

      await task2 // will take ~1000ms to resolve.
      assertBetween(getTime() - start_time, 950, 1100)

      await task1 // will already be resolved, since `task1` preceded `task2` in the queue.
      assertBetween(getTime() - start_time, 950, 1100)

      await task3 // will take an additional ~500ms to resolve (so ~1500ms in total).
      assertBetween(getTime() - start_time, 1450, 1600)

      assert(task4 instanceof Promise)
      assert(await task4, "hello world") // almost instantaneous promise-resolution
      assertBetween(getTime() - start_time, 1450, 1600)

      assert(task5 instanceof Promise)
      assert(await task5, "bye bye world") // almost instantaneous promise-resolution
      assertBetween(getTime() - start_time, 1450, 1600)