管道RxJS可观察到现有主题

Est*_*ask 14 javascript rxjs rxjs5

现有主题正在使用中:

const fooSubject = new BehaviorSubject(null);
Run Code Online (Sandbox Code Playgroud)

还有另一个可观察的(本例中的另一个主题):

const barSubject = new Subject();
barSubject.subscribe(
  value => fooSubject.next(),
  err => fooSubject.error(err),
  () => fooSubject.complete()
);

barSubject.next('bar');
Run Code Online (Sandbox Code Playgroud)

代码有效,但看起来很笨拙.

是否有更好的方法来管道(广义上,不一定使用pipe运算符)barSubject可观察到fooSubject?它看起来像是一个可以由库本身处理的操作.

mar*_*tin 20

由于主题是已经与方法的观察者next(),error()并且complete()你可以只是把它订阅任何可观察到:

const fooSubject = new BehaviorSubject(null);

const barSubject = new Subject();
barSubject.subscribe(fooSubject);

barSubject.next('bar');
Run Code Online (Sandbox Code Playgroud)

  • 对于某些人可能还不清楚,要让一个主体订阅一个Observable,它就是Observable.subscribe(Subject),而不是Subject.subscribe(Observable) (2认同)
  • 我想通常当“barSubject”超出范围时,您应该以某种方式取消订阅“fooSubject”。正确的?但是,如果“fooSubject”完成,您是否必须取消订阅“fooSubject”? (2认同)