consumer-queue

Asynchronous queueing (producer-consumer style) with promises

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
consumer-queue
1.1.04 years ago6 years agoMinified + gzip package size for consumer-queue in KB

Readme

consumer-queue
Build Status Coverage Status
This module implements a simple unbounded producer-consumer queue (similar to a BlockingQueue in Java). Multiple asynchronous tasks can push data, and one task can pull data from the queue and process it.

Installation

npm install consumer-queue

Usage

On the consumer side:
const ConsumerQueue = require('consumer-queue');
const queue = new ConsumerQueue();
function loop() {
    return queue.pop().then((value) => {
        // ... do something with value ...
        return loop();
    });
}

On the producer side:
// ... produce value ...
queue.push(value);
// ... produce second value ...
queue.push(value);

API

Class ConsumerQueue

constructor

constructor()

Construct a new empty queue.

method push

function push(value : any)

Push a new value at the end of the queue

method hasWaiter

function hasWaiter() : bool

Returns true if a consumer is currently waiting for the next value, false otherwise.

method cancelWait

function cancelWait(err : Error?)

If a consumer is currently waiting on the queue, causes the consumer to stop waiting. The consumer promise will be rejected with err, if given, or a generic error otherwise.

method pop

function pop() : Promise<any>

Asynchronously returns the next value in queue. This method returns a promise that will be fulfilled immediately if the queue already contains a value, and will be fulfilled when the producer calls push() otherwise.

method tryPop

function tryPop() : any?

Synchronously checks for the presence of a value in queue, and pops it if so. This method returns null if the queue is empty.