35 lines
624 B
JavaScript
35 lines
624 B
JavaScript
|
'use strict';
|
||
|
|
||
|
const Promise = require('bluebird');
|
||
|
|
||
|
class Semaphore {
|
||
|
constructor() {
|
||
|
this.counter = 0;
|
||
|
}
|
||
|
|
||
|
enter() {
|
||
|
this.counter++;
|
||
|
}
|
||
|
|
||
|
exit() {
|
||
|
this.counter--;
|
||
|
}
|
||
|
|
||
|
async waitForEmpty() {
|
||
|
const self = this;
|
||
|
|
||
|
function wait(resolve) {
|
||
|
if (self.counter == 0) {
|
||
|
resolve();
|
||
|
} else {
|
||
|
setTimeout(wait, 500, resolve);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return new Promise(resolve => {
|
||
|
setTimeout(wait, 500, resolve);
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = Semaphore;
|