jsketcher/modules/lstream/throttle.js

26 lines
578 B
JavaScript

import {StreamBase} from './base';
import {Emitter} from './emitter';
export class ThrottleStream extends StreamBase {
constructor(stream, delay = 0, accumulator = v => v) {
super();
this.stream = stream;
this.delay = delay;
this.accumulator = accumulator;
}
attach(observer) {
let scheduled = false;
let value = undefined;
this.stream.attach(val => {
value = this.accumulator(val);
if (!scheduled) {
setTimeout(() => {
scheduled = false;
observer(value);
});
}
}, this.delay)
}
}