首页 > 解决方案 > BehaviorSubject 映射一个 BehaviorSubject

问题描述

我有一个 rxjs@6 BehaviorSubject source$,我想从source$

  const source$ = new BehaviorSubject(someValue);
  const subSource$ = source$.pipe(map(transform));

我希望subSource$也是一个 BehaviorSubject,但不是,我怎样才能得到subSource$一个 BehaviorSubject ?

标签: rxjsrxjs6

解决方案


当 BehaviorSubject 通过管道传输时,它使用 AnonymousSubject,就像常规 Subject 一样。因此,调用 getValue() 的能力不会沿链进行。这是社区的决定。我同意(和其他一些人一样)如果存在管道后获取值的能力会很好,但可惜不支持。

因此,您需要执行以下操作:

const source$ = new BehaviorSubject(value);
const published$ = new BehaviorSubject(value);
const subSource$ = source$.pipe(...operators, multicast(published$));

然后,您可以在已发布的 $ 上调用 getValue() 以在该值通过您的运算符后检索该值。

请注意,您需要在 subSource$ 上调用 connect()(这将使其成为“热”可观察对象)或使用 refCount()。

也就是说,这并不是真正的 rxjs-ish 做事方式。因此,除非您有特定原因在值通过您的运算符后动态检索值而不是仅在流中订阅它,否则可能重新考虑该方法?


推荐阅读