为什么管道化BehaviorSubject在RxJS中创建AnonymousSubject?

Saw*_*oes 7 javascript rxjs subject-observer behaviorsubject rxjs5

创建RxJS时BehaviorSubject,它会一直停留BehaviorSubjectpipe。一旦一个pipe返回“d版本,它成为一个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')
    )
)
Run Code Online (Sandbox Code Playgroud)

我也遇到同样的问题ReplaySubject。我似乎无法遍历该主题并将其返回。它始终会转换为AnonymousSubject。我认为我在这里寻找的是类似Promise的行为,我可以从任何地方订阅此可观察值,并获取传递给它的一个值。

小智 6

这是由于lift调用Subject.

让我们更深入地研究一下您的示例:

  1. 您正在实例化一个BehaviorSubject扩展 Subject
  2. 你调用pluck运营商,其在内部调用 map操作
  3. map运营商内部调用liftBehaviorSubject被授予Subject,然后返回AnonymousSubject