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.
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