56 lines
1.4 KiB
JavaScript
56 lines
1.4 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.TimedQueue = void 0;
|
|
/**
|
|
* Queue that is flushed automatically when it reaches some item limit
|
|
* or when timeout is reached.
|
|
*/
|
|
class TimedQueue {
|
|
constructor() {
|
|
/**
|
|
* Queue will be flushed when it reaches this number of items.
|
|
*/
|
|
this.itemLimit = 100;
|
|
/**
|
|
* Queue will be flushed after this many milliseconds.
|
|
*/
|
|
this.timeLimit = 5000;
|
|
/**
|
|
* Method that will be called when queue is flushed.
|
|
*/
|
|
this.onFlush = (list) => { };
|
|
this.list = [];
|
|
this.timer = null;
|
|
}
|
|
push(item) {
|
|
this.list.push(item);
|
|
if (this.list.length >= this.itemLimit) {
|
|
this.flush();
|
|
return;
|
|
}
|
|
if (!this.timer) {
|
|
this.timer = setTimeout(() => {
|
|
this.flush();
|
|
}, this.timeLimit);
|
|
}
|
|
}
|
|
flush() {
|
|
const list = this.list;
|
|
this.list = [];
|
|
if (this.timer)
|
|
clearTimeout(this.timer);
|
|
this.timer = null;
|
|
if (list.length) {
|
|
try {
|
|
this.onFlush(list);
|
|
}
|
|
catch (error) {
|
|
// tslint:disable-next-line
|
|
console.error('TimedQueue', error);
|
|
}
|
|
}
|
|
return list;
|
|
}
|
|
}
|
|
exports.TimedQueue = TimedQueue;
|