# awaitqueue

> TypeScript utility to enqueue asynchronous tasks and run them sequentially one after another

Latest version **3.3.1** (published 2026-06-15) · ISC license · 0 weekly downloads

## Install

```sh
npm install awaitqueue
pnpm add awaitqueue
yarn add awaitqueue
bun add awaitqueue
```

## Health

**Score 60/100 (C)** — status: active.

Positive: has types; no vulnerabilities; high maintenance score; high quality score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 3.3.1 |
| Published | 2026-06-15 |
| First published | 2019-01-24 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=22 |
| Dependencies | 1 |
| Unpacked size | 34.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 38 |
| Author | Iñaki Baz Castillo |
| Maintainers | ibc, jmillan |

## Links

- npm: https://www.npmjs.com/package/awaitqueue
- Repository: https://github.com/versatica/awaitqueue
- Homepage: https://github.com/versatica/awaitqueue#readme
- Issues: https://github.com/versatica/awaitqueue/issues
- Funding: https://opencollective.com/mediasoup
- npm.io page: https://npm.io/package/awaitqueue

## Dependencies (1)

- [debug](https://npm.io/package/debug.md) ^4.4.3

## Recent versions

- 3.3.1 (latest) — 2026-06-15
- 3.3.0 — 2025-09-22
- 3.2.4 — 2025-08-14
- 3.2.3 — 2025-08-14
- 3.2.2 — 2025-07-05
- 3.2.1 — 2025-07-05
- 3.2.0 — 2025-03-24
- 3.1.0 — 2025-03-05
- 3.0.2 — 2023-10-26
- 3.0.1 — 2023-01-03
- 3.0.0 — 2022-12-26
- 2.4.0 — 2022-04-27
- 2.3.3 — 2020-10-20
- 2.3.2 — 2020-10-19
- 2.3.1 — 2020-10-19
- … 10 more at https://npm.io/package/awaitqueue/versions

## README

# AwaitQueue

[![][npm-shield-awaitqueue]][npm-awaitqueue]
[![][github-actions-shield-awaitqueue]][github-actions-awaitqueue]
[![][opencollective-shield-mediasoup]][opencollective-mediasoup]

TypeScript utility to enqueue asynchronous tasks and run them sequentially one after another. For Node.js and the browser.

## Installation

```bash
npm install awaitqueue
```

## Usage

In ESM:

```ts
import {
	AwaitQueue,
	AwaitQueuePushOptions,
	AwaitQueueTask,
	AwaitQueueTaskDump,
	AwaitQueueStoppedError,
	AwaitQueueRemovedTaskError,
} from 'awaitqueue';
```

Using CommonJS:

```ts
const {
	AwaitQueue,
	AwaitQueuePushOptions,
	AwaitQueueTask,
	AwaitQueueTaskDump,
	AwaitQueueStoppedError,
	AwaitQueueRemovedTaskError,
} = require('awaitqueue');
```

## Types

### `type AwaitQueuePushOptions`

```ts
export type AwaitQueuePushOptions = {
	removeOngoingTasksWithSameName?: boolean;
};
```

Options given to `awaitQueue.push()`.

- `removeOngoingTasksWithSameName`: If `true`, all previously enqueued tasks with same name will be removed and will reject with an instance of `AwaitQueueRemovedTaskError`.

### `type AwaitQueueTask`

```ts
type AwaitQueueTask<T> = () => T | PromiseLike<T>;
```

TypeScript type representing a function that returns a value `T` or a Promise that resolves with `T`.

### `type AwaitQueueTaskDump`

```ts
type AwaitQueueTaskDump = {
	idx: number;
	task: AwaitQueueTask<unknown>;
	name?: string;
	enqueuedTime: number;
	executionTime: number;
};
```

TypeScript type representing an item in the array returned by the `awaitQueue.dump()` method.

- `idx`: Index of the pending task in the queue (0 means the task being processed now).
- `task`: The function to be executed.
- `name`: The name of the given `function` (if any) or the `name` argument given to `awaitQueue.push()` method (if any).
- `enqueuedTime`: Time in milliseconds since the task was enqueued, this is, since `awaitQueue.push()` was called until its execution started or until now if not yet started.
- `executionTime`: Time in milliseconds since the task execution started (or 0 if not yet started).

## API

### Class `AwaitQueue`

```ts
const awaitQueue = new AwaitQueue();
```

#### Getter `awaitQueue.size`

```ts
size: number;
```

Number of enqueued pending tasks in the queue (including the running one if any).

#### Method `awaitQueue.push()`

```ts
async push<T>(task: AwaitQueueTask<T>, name?: string, options?: AwaitQueuePushOptions): Promise<T>
```

Accepts a task as argument and enqueues it after pending tasks. Once processed, the `push()` method resolves (or rejects) with the result (or error) returned by the given task.

- `@param task`: Asynchronous or asynchronous function.
- `@param name`: Optional task name.
- `@param.options`: Options.

#### Method `awaitQueue.stop()`

```ts
stop(): void
```

Makes all pending tasks reject with an instance of `AwaitQueueStoppedError`. The `AwaitQueue` instance is still usable for future tasks added via `push()` method.

#### Method `awaitQueue.remove()`

```ts
remove(taskIdx: number): void
```

Removes the pending task with given index. The task is rejected with an instance of `AwaitQueueRemovedTaskError`.

- `@param taskIdx`: Index of the pending task to be removed.

#### Method `awaitQueue.dump()`

```ts
dump(): AwaitQueueTaskDump[]
```

Returns an array with information about pending tasks in the queue. See the `AwaitQueueTaskDump` type above.

### Class `AwaitQueueStoppedError`

Custom `Error` derived class used to reject pending tasks once `awaitQueue.stop()` method has been called.

### Class `AwaitQueueRemovedTaskError`

Custom `Error` derived class used to reject pending tasks once `awaitQueue.remove()` method has been called.

## Usage examples

See the [unit tests](src/tests/test.ts).

## Author

- Iñaki Baz Castillo [[website](https://inakibaz.me)|[github](https://github.com/ibc/)]

## License

[ISC](./LICENSE)

[npm-shield-awaitqueue]: https://img.shields.io/npm/v/awaitqueue.svg
[npm-awaitqueue]: https://npmjs.org/package/awaitqueue
[github-actions-shield-awaitqueue]: https://github.com/versatica/awaitqueue/actions/workflows/awaitqueue.yaml/badge.svg?branch=master
[github-actions-awaitqueue]: https://github.com/versatica/awaitqueue/actions/workflows/awaitqueue.yaml?query=branch%3Amaster
[opencollective-shield-mediasoup]: https://img.shields.io/opencollective/all/mediasoup.svg
[opencollective-mediasoup]: https://opencollective.com/mediasoup/

---
_Source: https://npm.io/package/awaitqueue · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
