是否有更短的方法来提供Observable onComplete处理程序?

时间:2017-12-06 17:33:39

标签: javascript rxjs

我正在使用一个Observable链,我对下一个或错误值不感兴趣,只有当链完全完成时。点击订阅方法并为下一个提供2个noops并且出错是错误的,因此我可以提供onComplete回调。

例如:

let isRunning = true;

Observable.from([1000, 2000, 3000])
  .concatMap(value => Observable.timer(value)
  .subscribe(
    () => {},
    () => {},
    () => isRunning = false;
  );

我想要的是看起来像这样的东西

let isRunning = true;

Observable.from([1000, 2000, 3000])
  .concatMap(value => Observable.timer(value)
  .onComplete(() => isRunning = false);

2 个答案:

答案 0 :(得分:2)

不,没有捷径。但是,您可以传递null而不是空函数。

obs$.subscribe(null, null, () => this.isRunning = false);

如果你想要某种技巧,你也可以这样做

obs$.last().subscribe(() => this.isRunning = false);

例如,如果您需要访问完成处理程序中的最后一个发射值,这将是有意义的。

答案 1 :(得分:1)

最短的形式是使用观察者对象。

obs.subscribe({ complete: () => isRunning = false });