我有一个rxjs @ 6 BehaviorSubject source$
,我想从source$
获取子值
const source$ = new BehaviorSubject(someValue);
const subSource$ = source$.pipe(map(transform));
我希望subSource$
也是一个BehaviorSubject,但是不是,我该如何获取subSource$
是一个BehaviorSubject?
答案 0 :(得分:0)
通过管道传送BehaviorSubject时,它就像常规Subject一样使用AnonymousSubject。因此,调用getValue()的功能不会沿链传递。这是社区的决定。我同意(和其他一些观点一样),如果存在在管道传输后获取值的能力会很好,但是a支持。
因此,您需要执行以下操作:
const source$ = new BehaviorSubject(value);
const published$ = new BehaviorSubject(value);
const subSource$ = source$.pipe(...operators, multicast(published$));
然后您可以在已发布的$上调用getValue(),以在该值通过您的运算符后检索该值。
请注意,您将需要在subSource $上调用connect()(这将使其成为可观察到的“热”)或使用refCount()。
也就是说,这实际上并不是最rxjs风格的工作方式。因此,除非您有特定的原因需要在它通过您的运算符后动态检索该值,而不是只是在流中订阅它,否则您可能会重新考虑该方法?