rx-queue
Version:
Easy to Use ReactiveX Queue that Supports Delay/DelayExecutor/Throttle/Debounce/Concurrency Features Powered by RxJS/IxJS
38 lines • 1.1 kB
JavaScript
import { Subject, } from 'rxjs';
import { VERSION, } from './config.js';
// default set to 500 milliseconds
const DEFAULT_PERIOD_TIME = 500;
// https://codepen.io/maindg/pen/xRwGvL
export class RxQueue extends Subject {
period;
itemList = [];
constructor(period = DEFAULT_PERIOD_TIME) {
super();
this.period = period;
}
next(item) {
if (this.observers.length > 0) {
super.next(item);
}
else {
this.itemList.push(item);
}
}
subscribe(nextOrObserver, error, complete) {
let subscription; // TypeScript strict require strong typing differenciation
if (typeof nextOrObserver === 'function') {
subscription = super.subscribe(nextOrObserver, error, complete);
}
else {
subscription = super.subscribe(nextOrObserver);
}
this.itemList.forEach(item => this.next(item));
this.itemList = [];
return subscription;
}
version() {
return VERSION;
}
}
export default RxQueue;
//# sourceMappingURL=rx-queue.js.map