esm-async-queue
    TypeScript icon, indicating that this package has built-in type declarations

    0.2.2 • Public • Published

    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

    Install

    npm i esm-async-queue

    DownloadsWeekly Downloads

    9

    Version

    0.2.2

    License

    0BSD

    Unpacked Size

    6.78 kB

    Total Files

    7

    Last publish

    Collaborators

    • danielgormly