unqueue

📏 Simple, zero-config, in-memory queue for async JS tasks

Usage no npm install needed!

<script type="module">
  import unqueue from 'https://cdn.skypack.dev/unqueue';
</script>

README

📏 Unqueue

Unqueue is a simple, zero-config, in-memory queue for async JavaScript tasks. You can use it to sequentially run tasks that return promises, like sending emails or performing networking requests. It automatically retries failed promises too.

| | Status | | - | - | | Build | Node CI Dependencies GitHub release (latest by date) Snyk Vulnerabilities for GitHub Repo | | Health | License CI CLA Assistant Pull Request Labeler | | PRs | PR Generator CI Merge PRs |

⭐️ Features

  • No configuration or databases required (in-memory)
  • Automatically retry tasks if they fail
  • First-class TypeScript and Node.js 14 support
  • No dependencies

💻 Getting started

Install from npm:

npm install unqueue

Create a new instance of the class and use the add function:

import { Unqueue } from "unqueue";

const queue = new Unqueue();

queue.add(async () => {
  // Async function that might throw an error
});

Optionally, you can add metadata for tasks:

// Example helper to fetch and write user details
const userIds = ["anand", "carlo"];
const get = async (userId: string) => {
  const { data } = await axios.get(`https://example.com/users/${userId}`);
  await fs.writeFile(`${userId}.json`, data);
};

// Error handler that logs the user ID from metadata
const queue = new Unqueue({
  onError: ({ metadata, error }) =>
    console.log(`Got an error in fetching ${metadata.userId}`, error),
});
userIds.forEach((id) => {
  queue.add(() => get(id), { id });
});

You can configure the queue, these are the defaults:

const queue = new Unqueue({
  maxAttempts: 3,
  debug: false,
  ttl: 3600,
  onError: ({ task, error }) => console.log(`Error in ${task.name}`, error),
});

📄 License

MIT © Koj

Koj

An open source project by Koj.
Furnish your home in style, for as low as CHF175/month →