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

Why does piping a BehaviorSubject create an AnonymousSubject in RxJS?

在创建 RxJS BehaviorSubject 时,它会保持 BehaviorSubject 直到 pipe。一旦 pipe 的版本被 return 编辑,它就会变成 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')
    )
)

我在使用 ReplaySubject 时也遇到了同样的问题。我似乎无法通过主题和 return 返回该主题。它总是转换为 AnonymousSubject。我想我在这里寻找的是类似 Promise 的行为,我可以从任何地方订阅这个 observable 并获取传递给它的一个值。

发生这种情况是由于 called on Subject

让我们更深入地了解您的示例:

  1. 您正在实例化 BehaviorSubject 扩展 Subject
  2. 您正在调用 internally 调用的 pluck 操作员 map 运算符
  3. map operator internallyBehaviorSubject 上调用 lift 委托给 Subject 然后 returns 一个 AnonymousSubject