UNPKG

p-queue-es5

Version:

Promise queue with concurrency control

89 lines (85 loc) 3.23 kB
import EventEmitter = require('eventemitter3'); import { Queue } from './queue'; import PriorityQueue from './priority-queue'; import { QueueAddOptions, DefaultAddOptions, Options } from './options'; declare type Task<TaskResultType> = (() => PromiseLike<TaskResultType>) | (() => TaskResultType); /** Promise queue with concurrency control. */ export default class PQueue<QueueType extends Queue<EnqueueOptionsType> = PriorityQueue, EnqueueOptionsType extends QueueAddOptions = DefaultAddOptions> extends EventEmitter<'active'> { private readonly _carryoverConcurrencyCount; private readonly _isIntervalIgnored; private _intervalCount; private readonly _intervalCap; private readonly _interval; private _intervalEnd; private _intervalId?; private _timeoutId?; private _queue; private readonly _queueClass; private _pendingCount; private readonly _concurrency; private _paused; private _resolveEmpty; private _resolveIdle; private _timeout?; private readonly _throwOnTimeout; constructor(options?: Options<QueueType, EnqueueOptionsType>); readonly doesIntervalAllowAnother: boolean; readonly doesConcurrentAllowAnother: boolean; next(): void; resolvePromises(): void; onResumeInterval(): void; intervalPaused(): boolean; tryToStartAnother(): boolean; initializeIntervalIfNeeded(): void; onInterval(): void; /** Adds a sync or async task to the queue. Always returns a promise. */ add<TaskResultType>(fn: Task<TaskResultType>, options?: EnqueueOptionsType): Promise<TaskResultType>; /** Same as `.add()`, but accepts an array of sync or async functions. @returns A promise that resolves when all functions are resolved. */ addAll<TaskResultsType>(functions: ReadonlyArray<Task<TaskResultsType>>, options?: EnqueueOptionsType): Promise<TaskResultsType[]>; /** Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.) */ start(): void; /** Put queue execution on hold. */ pause(): void; /** Clear the queue. */ clear(): void; /** Can be called multiple times. Useful if you for example add additional items at a later time. @returns A promise that settles when the queue becomes empty. */ onEmpty(): Promise<void>; /** The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet. @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`. */ onIdle(): Promise<void>; /** Size of the queue. */ readonly size: number; /** Number of pending promises. */ readonly pending: number; /** Whether the queue is currently paused. */ readonly isPaused: boolean; /** Set the timeout for future operations. */ timeout: number | undefined; } export { Queue, QueueAddOptions, DefaultAddOptions, Options };