When creating an RxJS BehaviorSubject, it stays a BehaviorSubject until it's pipe'd. As soon a pipe'd version is returned, it becomes an AnonymousSubject.
// Instance of `BehaviorSubject`
const behaviorSubject$ = new BehaviorSubject({ someValue: null })
// Suddenly becomes an Anonymous Subject
const anonymousSubject$ = (
behaviorSubject$
.pipe(
pluck('someValue')
)
)
// Also suddenly becomes an Anonymous Subject
const anonymousSubject$ = (
new BehaviorSubject({ someValue: null })
.pipe(
pluck('someValue')
)
)
I experience this same issue with ReplaySubject as well. I can't seem to pipe through the subject and return that subject back. It always converts to an AnonymousSubject. I think what I'm looking for here is Promise-like behavior where I can subscribe to this observable from anywhere and grab the one value passed into it.
A BehaviorSubject holds one value (so we actually need to initialize a default value). When it is subscribed it emits that value immediately. A Subject on the other hand, does not hold a value.
A Subject is like an Observable, but can multicast to many Observers. Subjects are like EventEmitters: they maintain a registry of many listeners. Every Subject is an Observable. Given a Subject, you can subscribe to it, providing an Observer, which will start receiving values normally.
Observable is a Generic, and BehaviorSubject is technically a sub-type of Observable because BehaviorSubject is an observable with specific qualities. An observable can be created from both Subject and BehaviorSubject using subject.
A Subject is a special type of Observable that allows values to be multicasted to many Observers. The subjects are also observers because they can subscribe to another observable and get value from it, which it will multicast to all of its subscribers. Basically, a subject can act as both observable & an observer.
This is happening due to lift called on Subject.
Let's take a deeper look at your example:
BehaviorSubject which extends
Subject
pluck operator which internally calls
map operatormap operator internally calls lift on BehaviorSubject which is delegated to Subject which then returns an AnonymousSubject
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With