typed-utilities
Version:
Strongly typed general purpose utilities
42 lines (32 loc) • 724 B
JavaScript
;
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