UNPKG

1.11 kBJavaScriptView Raw
1/*
2 * Copyright 2020 Adobe. All rights reserved.
3 * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License. You may obtain a copy
5 * of the License at http://www.apache.org/licenses/LICENSE-2.0
6 *
7 * Unless required by applicable law or agreed to in writing, software distributed under
8 * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9 * OF ANY KIND, either express or implied. See the License for the specific language
10 * governing permissions and limitations under the License.
11 */
12/* eslint-env mocha */
13
14class Lock {
15 constructor() {
16 this._acquired = false;
17 this._waiting = [];
18 }
19
20 async acquire() {
21 if (this._acquired) {
22 return new Promise((resolve) => this._waiting.push(resolve));
23 }
24
25 this._acquired = true;
26 return Promise.resolve();
27 }
28
29 release() {
30 if (this._waiting.length > 0) {
31 const resolve = this._waiting.shift();
32 resolve();
33 } else {
34 this._acquired = false;
35 }
36 }
37}
38
39module.exports = { Lock };