@hortemo/semaphore
Version:
A minimal FIFO semaphore for JS/TS.
35 lines (24 loc) • 677 B
Markdown
for JavaScript and TypeScript.
```bash
npm install @hortemo/semaphore
```
```ts
import Semaphore from "@hortemo/semaphore";
const semaphore = new Semaphore(5);
async function processItem(item: string): Promise<void> {
const release = await semaphore.acquire();
try {
await doWork(item);
} finally {
release();
}
}
await Promise.all(items.map(processItem));
```
- `new Semaphore(permits: number)`: Create a semaphore with `permits` available.
- `await semaphore.acquire()`: Wait for a permit and receive a `Releaser`. Call it to free the permit.
- `type Releaser = () => void`
Promise-based FIFO semaphore