promise queue with option to limit new task start time with timeout
- yarn:
yarn add @shelex/promise-queue-timeout
- npm:
npm install @shelex/promise-queue-timeout
import Queue from '@shelex/promise-queue-timeout';
// const Queue = require("@shelex/promise-queue-timeout")
const runner = new Queue({
executors: 2,
timeout: 2000 // ms
});
runner.enqueue(task, 'A'); // starts automatically
runner.enqueue(task, 'B'); // will be started after 2000ms
runner.enqueue(task, 'C'); // will be started when A or B finished, but after 2000ms from previous start
runner.on('resolve', (data) => console.log(data));
runner.on('reject', (error) => console.error(error));
runner.on('end', () =>
console.log(`queue finished, all enqueued tasks processed`)
);
Constructor. options
may contain inital values for:
q.executors
, default: 2; number of tasks executedq.timeout
, default: 1000; number of ms after previous task start time
Add a task to queue which immediately starts processing.
Task is a function that returns a promise. Id is optional.
Stops the queue and clears tasks backlog. can be resumed with enqueuing new taks.
Returns resolved value for next executed task
queue started tasks processing
queue processed all tasks
queue stopped processing current tasks and cleared backlog
queue starting task. Callback has task ID and remaining counter for tasks backlog
returns value resolved for just executed task
returns err for rejected promise for just executed task
queue is selecting next task from backlog
This queue is an attempt to solve issue with parallelizing testing engines which are fighting for shared resources on initialization, so adding a timeout after start would allow to limit such concurrent startup.
Copyright © 2020 Oleksandr Shevtsov ovr.shevtsov@gmail.com
This work is free. You can redistribute it and/or modify it under the terms of the MIT License. See LICENSE for full details.