【问题标题】:BehaviorSubject map a BehaviorSubjectBehaviorSubject 映射一个 BehaviorSubject
【发布时间】:2018-07-09 10:20:11
【问题描述】:

我有一个 rxjs@6 BehaviorSubject source$,我想从 source$ 获取子值

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

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

【问题讨论】:

标签: rxjs rxjs6


【解决方案1】:

当 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 的做事方式。因此,除非您有特定原因在值通过您的运算符后动态检索值而不是仅在流中订阅它,否则可能会重新考虑该方法?

【讨论】:

    猜你喜欢
    • 2018-01-20
    • 1970-01-01
    • 2018-02-20
    • 2021-01-14
    • 2021-07-20
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多