0.2.2 • Published 3 years ago

esm-async-queue v0.2.2

Weekly downloads
15
License
0BSD
Repository
github
Last release
3 years ago

Publish on NPM NPM Version

esm-async-queue

A single class Queue to create an immediately starting queue of asynchronous or synchronous functions, processing n tasks concurrently. Dependency free. Exported as an esm module. Typescript definitions included.

Install

npm install esm-async-queue

Basic usage:

Example of

import { Queue } from './index.js';

const delayedResolution = (ms: any) =>
  new Promise((resolve) => setTimeout(resolve, ms));

const queue = new Queue({ concurrency: 2 });

const startTime = (new Date()).valueOf();
const getElapsedTime = (since) => `${((new Date()).valueOf() - since)}ms`;

queue.push(() => delayedResolution(200).then(() => console.log('a', getElapsedTime(startTime))));
queue.push(() => delayedResolution(400).then(() => console.log('b', getElapsedTime(startTime))));
queue.push(() => delayedResolution(200).then(() => console.log('c', getElapsedTime(startTime))));
queue.push(() => delayedResolution(400).then(() => console.log('d', getElapsedTime(startTime))));

queue.subscribe('idle', () => console.log('idle', getElapsedTime(startTime)));

// output:
// a 205ms
// b 406ms
// c 407ms
// d 811ms
// queueIdle 811ms

Methods

constructor(opts)

Creates a new queue instance.

opts.concurrency: integer, default: 1 The limit of tasks to be processed in parallel.

push(function returning PromiseLike, async function, function)

Add a task to the queue. Processes immediately if the total length of existing tasks is less than the concurrency value.

Properties

length: integer count ALL tasks in the queue, including pending tasks.

tasksPending: integer count tasks that are in the queue, awaiting processing.

tasksProcessing:: integer count tasks that are currently processing.

concurrency: integer show count of maximum concurrent tasks.

Events

// Example: This script will print true when all items have been processed (after 200ms). Finally, unsubscribe.
const queue = new Queue({ concurrency: 2 });
const unsubscribe = queue.on('idle', () => console.log(queue.length === 0)); // the returning function allows you to remove a subscription
queue.push(() => delayedResolution(200));

idle: Fired when the total queue length, including tasks processing drops to 0.

taskProcessing: Fired when a task begins processing.

taskProcessed: Fired when a task completes.

taskPushed: Fired when a task is pushed to the queue.

Development notes

See development.md

0.2.1

3 years ago

0.2.0

3 years ago

0.2.2

3 years ago

0.1.0

3 years ago

0.1.1

3 years ago

0.0.4

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago