ReplaySubject
A variant of Subject that "replays" old values to new subscribers by emitting them when they first subscribe.
ReplaySubject
has an internal buffer that will store a specified number of values that it has observed. Like Subject
,
ReplaySubject
"observes" values by having them passed to its next
method. When it observes a value, it will store that
value for a time determined by the configuration of the ReplaySubject
, as passed to its constructor.
When a new subscriber subscribes to the ReplaySubject
instance, it will synchronously emit all values in its buffer in
a First-In-First-Out (FIFO) manner. The ReplaySubject
will also complete, if it has observed completion; and it will
error if it has observed an error.
There are two main configuration items to be concerned with:
bufferSize
- This will determine how many items are stored in the buffer, defaults to infinite.windowTime
- The amount of time to hold a value in the buffer before removing it from the buffer.
Both configurations may exist simultaneously. So if you would like to buffer a maximum of 3 values, as long as the values
are less than 2 seconds old, you could do so with a new ReplaySubject(3, 2000)
.
Differences with BehaviorSubject
BehaviorSubject
is similar to new ReplaySubject(1)
, with a couple of exceptions:
BehaviorSubject
comes "primed" with a single value upon construction.ReplaySubject
will replay values, even after observing an error, whereBehaviorSubject
will not.
§Constructors
The size of the buffer to replay on subscription
The amount of time the buffered items will stay buffered
An object with a now()
method that provides the current timestamp. This is used to
calculate the amount of time something has been buffered.