rxjs - BehaviorSubject 映射一个 BehaviorSubject

标签 rxjs rxjs6

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

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

我期待 subSource$也是一个 BehaviorSubject,但不是,我怎样才能得到 subSource$是 BehaviorSubject 吗?

最佳答案

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

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

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


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

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

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

关于rxjs - BehaviorSubject 映射一个 BehaviorSubject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51243204/

相关文章:

javascript - RxJs:依次执行 3 个可观察对象,并在第二个请求中使用第一个,在第三个请求中使用第一个和第二个的结果

angular - 当多个 RxJS forkjoin 完成时如何采取行动?

javascript - 管道内的映射被忽略并且不会触发http调用

javascript - 在取消订阅函数中异步处理资源

angular - 如何在 Angular 6 中使用 rxjs fromEvent 定位 HTML 元素

rxjs - 迁移到新版本后,NestJS 上的 forkJoin 不起作用

angular - Rxjs 6 : using catchError() gives You provided 'undefined' where a stream was expected. 您可以提供一个 Observable、Promise、Array 或 Iterable

angular - Rxjs 将超时错误从管道抛出到可观察错误部分

javascript - 如何在javascript中获取多维数组中数组的键和值

angular - rxjs 可观察导入问题