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

时间:2018-04-24 03:53:35

标签: javascript rxjs rxjs5 behaviorsubject subject-observer

创建RxJS BehaviorSubject时,它会保持BehaviorSubject直到pipe为止。一旦返回pipe'版本,它就会变为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同样的问题。我似乎无法通过主题并将该主题归还。它总是转换为AnonymousSubject。我认为我在这里寻找的是类似Promise的行为,我可以从任何地方订阅这个observable,并获取传递给它的一个值。

1 个答案:

答案 0 :(得分:3)

发生这种情况的原因是lift被调用Subject

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

  1. 您正在实例化一个扩展了BehaviorSubject的实例 Subject
  2. 您正在呼叫internally所呼叫的pluck运算符 map运算符
  3. map运算符internally调用lift上的BehaviorSubject,该{@ 1被委托给Subject,然后返回AnonymousSubject