所以当第一个observable触发其完成处理程序时,我需要一个完整的热可观察链。
一个例子可能更容易:
hot1.complete()
演示:http://jsbin.com/berexexoyu/edit?js,console
当我致电
DateTime
时,我需要输出==
。
这可以在功能上解决,而不会进入势在必行的领域吗?
答案 0 :(得分:1)
它可能看起来像一个小黑客,但由于你只想通过完成hot1
来控制链,你可以使用takeUntil
在hot1
完成后完成链,而忽略它的所有值:
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
并完成整个链。