AnandChowdhary / unqueue

πŸ“ Simple, zero-config, in-memory queue for async JS tasks

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

πŸ“ 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 β†’

About

πŸ“ Simple, zero-config, in-memory queue for async JS tasks


Languages

Language:TypeScript 85.9%Language:JavaScript 14.1%