UNPKG

es-toolkit

Version:

A state-of-the-art, high-performance JavaScript utility library with a small bundle size and strong type annotations.

35 lines (31 loc) 776 B
'use strict'; Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); class Semaphore { capacity; available; deferredTasks = []; constructor(capacity) { this.capacity = capacity; this.available = capacity; } async acquire() { if (this.available > 0) { this.available--; return; } return new Promise(resolve => { this.deferredTasks.push(resolve); }); } release() { const deferredTask = this.deferredTasks.shift(); if (deferredTask != null) { deferredTask(); return; } if (this.available < this.capacity) { this.available++; } } } exports.Semaphore = Semaphore;