BehaviorSubject映射一个BehaviorSubject

时间:2018-07-09 10:20:11

标签: rxjs rxjs6

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

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

我希望subSource$也是一个BehaviorSubject,但是不是,我该如何获取subSource$是一个BehaviorSubject?

1 个答案:

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