sync-task-queue

Execute async tasks in sequence.

Usage no npm install needed!

<script type="module">
  import syncTaskQueue from 'https://cdn.skypack.dev/sync-task-queue';
</script>

README

Pipeline Status

Sync Task Queue

Makes sure async tasks are executed in sequence.

  • 🎂 No dependencies!
  • 💎 0.8kB minified!
  • 🦄 Compatible with Node >= 6 and all browsers that support Promises

Usage

const createTaskQueue = require('sync-task-queue');

const taskQueue = createTaskQueue();

function taskA() {
  console.log('Starting HTTP request A');

  return doHttpRequest('/a');
}

function taskB() {
  console.log('Starting HTTP request B');

  return doHttpRequest('/b');
}

taskQueue.enqueue(taskA)
  .then(() => console.log('Done with HTTP request A'));

taskQueue.enqueue(taskB)
  .then(() => console.log('Done with HTTP request B'));

/**
 * Output:
 *
 * Starting HTTP request A
 * Done with HTTP request A
 * Starting HTTP request B
 * Done with HTTP request B
 */

The task queue will make sure taskB does not start after taskA has finished.

Note that for tasks to be run in sequence, they MUST use the same instance of the taskQueue. This means you can create multiple taskQueue's for different parts of your application to still run in parallel.

You can pass in arguments to the task by passing them as an array:

taskQueue.enqueue(taskA, ['x', 1]);

Our you can just use a callback:

taskQueue.enqueue(() => taskA('x', 1));

Enqueue will return a promise that will resolve (or reject with) the result of the task.

taskQueue
  .enqueue(() => doHttpRequest('/a'))
  .then(result => console.log(result)); // Will log the result of the HTTP request.
  .catch(error => console.error(error)); // Will log an error that occurred in the HTTP request.

The task queue will continue to execute the next tasks if one task rejects.