infobip-rtc
Version:
Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation
45 lines • 1.23 kB
JavaScript
export class AsyncLock {
constructor() {
this.taskQueue = [];
this.active = false;
}
acquireLock() {
return new Promise(lockResolve => {
this.withLock(() => {
return new Promise((resolve) => {
lockResolve({
release: () => {
resolve(null);
}
});
});
});
});
}
withLock(action) {
let deferredResolve;
let deferredReject;
const deferred = new Promise((resolve, reject) => {
deferredResolve = resolve;
deferredReject = reject;
});
const executeTask = async () => {
await action().then(deferredResolve, deferredReject);
if (this.taskQueue.length > 0) {
this.taskQueue.shift()();
}
else {
this.active = false;
}
};
if (this.active) {
this.taskQueue.push(executeTask);
}
else {
this.active = true;
executeTask();
}
return deferred;
}
}
//# sourceMappingURL=AsyncLock.js.map