Javascript RXJS:如何使用takeUntil直到另一个可观察对象完成(而不是发射)

Javascript RXJS:如何使用takeUntil直到另一个可观察对象完成(而不是发射),javascript,angular,rxjs,Javascript,Angular,Rxjs,我有两个观测值: 1:计算一个值并完成。(重要提示:可能在发出任何值之前完成!) 2:在1完成之前进行填充(不发射) 您将如何在RxJS中实现这一点 我的第一次尝试是使用last()如下所示: 但是当firstObservable完成时,问题就出现了,而没有发出任何值。 出现一个错误: Error: no elements in sequence 问题:在observable 2完成后,如何使用TakeTill(或任何其他操作符)停止订阅,并且在没有发出最后一个值时不抛出错误?您可以在seco

我有两个观测值:

1:计算一个值并完成。(重要提示:可能在发出任何值之前完成!)

2:在1完成之前进行填充(不发射)

您将如何在RxJS中实现这一点

我的第一次尝试是使用last()如下所示:

但是当firstObservable完成时,问题就出现了,而没有发出任何值。 出现一个错误:

Error: no elements in sequence

问题:在observable 2完成后,如何使用TakeTill(或任何其他操作符)停止订阅,并且在没有发出最后一个值时不抛出错误?

您可以在
secondOvservable
上使用finalize,并在那里完成
firstObservable
。这样,它不依赖于发出的任何值,只依赖于完整的事件

secondOvservable.pipe(
  finalize(() => firstObservable.complete())
).subscribe(count =>{
  //do stuff with count
});

我正在修补finalize,但有两个问题:首先,它觉得滥用finalize做一些简单的事情“错了”,比如等待一个可观察到的完成。第二个finalize似乎没有被调用,当一个observable只完成,而next()从未被调用,或者我错了?这里有一个stackblitz显示了这一点(切换第12行以生效):我编辑了你的stackblitz:。那么可观测2将等待可观测1完成吗?
secondOvservable.pipe(
  finalize(() => firstObservable.complete())
).subscribe(count =>{
  //do stuff with count
});