In this article, we'll review how these operators work and how they differ.
For simplicity, we'll compare their
sampleTime — they work in the same way, just in defined time windows.
These operators are handy when you want to lower the load on the consumption function side. For example, you don't want to react to every user
mousemove or every
input.change event. In their own way, they will let you filter input stream based on time intervals. So let's see how they differ!
We'll start with investigating this marble diagram:
Explanation: here we apply all four operators to the
source stream. The
source starts emitting at
time:0 and completes at
time:1000. In the applied operators the colors are preserved from the
source, but the value is substituted with the actual time of emission in resulting stream.
As you can see:
debounceTime will emit a value from the source stream only if a given time has passed without source producing more values
throttleTime will start a timer when the source emits. It can be set to emit the first and/or the last value in the given time window. Then it repeats this procedure
auditTime behaves in a similar way to the trailing throttleTime, but note that it won't emit a value from the last time window if the source has completed
sampleTime simply emits a value from the source in a given time window if the source actually emitted
I believe in learning by playing, so head to this marble diagram REPL to try changing code yourself: thinkrx.io/rxjs/debounceTime-vs-throttleTime-vs-auditTime-vs-sampleTime
That's it! Please, add a comment if you've learned something new!
Also, check out my RxJS-based framework:
And my declarative Rx endeavors:
I'm planning to share more comparisons and reviews on RxJS.
If you are interested — Follow me here and on twitter!
See you next time