简体   繁体   English

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

[英]RXJS: How to use takeUntil until another Observable completes (and not emits)

I have two Observables:我有两个 Observable:

1: counts up a value and completes. 1:计数值完成。 (important: May complete before ever emitting any value!) (重要:可能在发出任何值之前完成!)

2: does stuff until 1 COMPLETES (not emits) 2:做东西直到 1 完成(不发射)

How would you implement this in RxJS?您将如何在 RxJS 中实现这一点?

My first try is using last() like:我的第一次尝试是使用 last() ,例如:

firstObservable.pipe(
    takeUntil(secondObservable.pipe(last()))
  ).subscribe(count =>{
    //do stuff with count
  });

But the prroblem arises when firstObservable completes without ever emitting any value.但是当 firstObservable 在没有发出任何值的情况下完成时,问题就出现了。 An error is raised:引发错误:

Error: no elements in sequence

Question : How can i use takeUntil (or any other operator) to stop the subscription after observable 2 completed and not throw an error when no last value ever was emitted?问题:如何在 observable 2 完成后使用 takeUntil (或任何其他运算符)停止订阅,并且在没有发出最后一个值时不抛出错误?

You can use finalize on the secondOvservable and complete the firstObservable there.您可以在secondOvservable上使用 finalize 并在那里完成firstObservable That way it does not depends on any value emitted, just on the complete event.这样它不依赖于任何发出的值,只依赖于完整的事件。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 RxJS - 当 takeUntil 及其通知器 observable 在同一个内部 observable 中发出时,Observable 不会执行 - RxJS - Observable does not execute when takeUntil and its notifier observable emits in the same internal observable RxJS 另一个发出值时可观察到的错误 - RxJS Error Observable when another emits value RxJS takeUntil 在高阶可观察之前 - RxJS takeUntil before higher-order observable 如何在源Observable发出但仅使用最新值时切换到另一个Observable - How to switch to another Observable when a source Observable emits but only use latest value RxJs Observable多次完成 - RxJs Observable completes multiple times RxJs | 如何将`mergeMap`延迟到前一个内部可观察对象完成的时刻? - RxJs | How to delay `mergeMap` to moment when previous inner observable completes? 如何在 RxJS 中创建一个依赖于另一个 Observable 的 Observable - How to create an Observable that depends on another Observable in RxJS 在 RxJS 中,是否应该在不发出任何项目的可观察对象中调用 complete? - In RxJS, should complete be called in an observable that emits no items? Rxjs:带有 takeUntil(timer) 的 Observable 在计时器滴答后继续发射 - Rxjs: Observable with takeUntil(timer) keeps emitting after the timer has ticked RxJs - 我可以将 BehaviorSubject 与 takeUntil 一起使用吗? - RxJs - Can I use a BehaviorSubject with takeUntil?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM