完成具有多个热观察的热的可观察链

时间:2018-03-12 13:01:43

标签: javascript rxjs rxjs5

所以当第一个observable触发其完成处理程序时,我需要一个完整的热可观察链。

一个例子可能更容易:

hot1.complete()

演示:http://jsbin.com/berexexoyu/edit?js,console

  

当我致电DateTime时,我需要输出==

这可以在功能上解决,而不会进入势在必行的领域吗?

1 个答案:

答案 0 :(得分:1)

它可能看起来像一个小黑客,但由于你只想通过完成hot1来控制链,你可以使用takeUntilhot1完成后完成链,而忽略它的所有值:

const hot1 = new Subject();
const hot2 = new Subject();

const example = hot1
  .do(() => console.log('HOT1 emitted'))
  .switchMap(() => hot2.do(() => console.log('HOT2 emitted')))
  .takeUntil(hot1.ignoreElements().concat(Observable.of(1)));

const subscribe = example.subscribe({
  next: console.log,
  error: console.error,
  complete: () => console.info('CHAIN COMPLETE')
});

hot1.next();
hot2.next('abc');

hot1.complete();

查看更新的演示版(开放式控制台):https://stackblitz.com/edit/rxjs5-rfhpi2?file=index.ts

诀窍是使用hot1.ignoreElements().concat(Observable.of(1))hot1完成后发出单个值,通知takeUntil并完成整个链。