omelop
Version:
[](https://travis-ci.org/node-omelop/omelop)
51 lines • 3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCountDownLatch = exports.CountDownLatch = void 0;
/**
* Count down to zero or timeout and invoke cb finally.
*/
class CountDownLatch {
constructor(count, opts, cb) {
this.count = count;
this.cb = cb;
let self = this;
if (opts.timeout) {
this.timerId = setTimeout(function () {
self.cb(true);
}, opts.timeout);
}
}
/**
* Call when a task finish to count down.
*
* @api public
*/
done() {
if (this.count <= 0) {
throw new Error('illegal state.');
}
this.count--;
if (this.count === 0) {
if (this.timerId) {
clearTimeout(this.timerId);
}
this.cb();
}
}
}
exports.CountDownLatch = CountDownLatch;
function createCountDownLatch(count, opts, cb) {
if (!count || count <= 0) {
throw new Error('count should be positive.');
}
if (!cb && typeof opts === 'function') {
cb = opts;
opts = {};
}
if (typeof cb !== 'function') {
throw new Error('cb should be a function.');
}
return new CountDownLatch(count, opts, cb);
}
exports.createCountDownLatch = createCountDownLatch;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnREb3duTGF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbC9jb3VudERvd25MYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQTs7R0FFRztBQUNILE1BQWEsY0FBYztJQUl2QixZQUFZLEtBQWEsRUFBRSxJQUEyQixFQUFFLEVBQTBCO1FBQzlFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO2dCQUN0QixJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUk7UUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNyQztRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNkLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUI7WUFDRCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDYjtJQUNMLENBQUM7Q0FDSjtBQWpDRCx3Q0FpQ0M7QUFhRCxTQUFnQixvQkFBb0IsQ0FBQyxLQUFhLEVBQUUsSUFBc0QsRUFBRSxFQUE0QjtJQUN0SSxJQUFHLENBQUMsS0FBSyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0tBQzlDO0lBRUQsSUFBSSxDQUFDLEVBQUUsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDckMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNWLElBQUksR0FBRyxFQUFFLENBQUM7S0FDWDtJQUVELElBQUcsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztLQUM3QztJQUVELE9BQU8sSUFBSSxjQUFjLENBQUMsS0FBSyxFQUFFLElBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQWZELG9EQWVDIn0=