UNPKG

typed-utilities

Version:
42 lines (32 loc) 724 B
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AsyncLock = void 0; var _Deferred = require("./Deferred"); class AsyncLock { _length = 0; constructor() { this.queue = Promise.resolve(); this._length = 0; } use = async fn => { this._length++; const deferred = _Deferred.Deferred.defer(); this.queue = this.queue.finally(async () => { try { deferred.resolve(await fn()); } catch (error) { deferred.reject(error); } finally { this._length--; } }); return deferred.await(); }; get length() { return this._length; } } exports.AsyncLock = AsyncLock; //# sourceMappingURL=AsyncLock.js.map