diff --git a/source/index.ts b/source/index.ts index 9a16cdb..3b63d74 100644 --- a/source/index.ts +++ b/source/index.ts @@ -289,10 +289,10 @@ export default class PQueue { this.#queue.enqueue(async () => { this.#pending++; - this.#intervalCount++; try { options.signal?.throwIfAborted(); + this.#intervalCount++; let operation = function_({signal: options.signal}); diff --git a/test/test.ts b/test/test.ts index 748ee29..ff0c06a 100644 --- a/test/test.ts +++ b/test/test.ts @@ -1116,6 +1116,26 @@ test('should pass AbortSignal instance to job', async t => { }, {signal: controller.signal}); }); +test('aborted jobs do not use interval cap', async t => { + const queue = new PQueue({ + concurrency: 1, + interval: 100, + intervalCap: 1, + }); + + const controller = new AbortController(); + + for (let index = 0; index < 5; index++) { + queue.add(() => {}, {signal: controller.signal}).catch(() => {}); // eslint-disable-line @typescript-eslint/no-empty-function + } + + queue.add(() => {}); // eslint-disable-line @typescript-eslint/no-empty-function + + controller.abort(); + await delay(150); + t.is(queue.size, 0); +}); + test('aborting multiple jobs at the same time', async t => { const queue = new PQueue({concurrency: 1});