我有一个 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/