RXJS:如何使用 takeUntil 直到另一个 Observable 完成(并且不发出)

Max*_*ner 5 javascript rxjs angular

我有两个可观察对象:

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

2:执行操作直到 1 完成(不发出)

你会如何在 RxJS 中实现这个?

我的第一次尝试是使用last(),例如:

firstObservable.pipe(
    takeUntil(secondObservable.pipe(last()))
  ).subscribe(count =>{
    //do stuff with count
  });
Run Code Online (Sandbox Code Playgroud)

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

Error: no elements in sequence
Run Code Online (Sandbox Code Playgroud)

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

dal*_*ows 3

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

secondOvservable.pipe(
  finalize(() => firstObservable.complete())
).subscribe(count =>{
  //do stuff with count
});
Run Code Online (Sandbox Code Playgroud)