Promise-based FIFO semaphore for JavaScript and TypeScript.
npm install @hortemo/semaphore
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 withpermits
available.await semaphore.acquire()
: Wait for a permit and receive aReleaser
. Call it to free the permit.type Releaser = () => void