您如何取消或取消订阅,然后再继续进行Observables下的操作?

时间:2018-11-18 23:09:33

标签: javascript typescript rxjs observable subscription

我对Rxjs / Observables非常陌生,这真的开始困扰我。我使用了一个Observable来遍历方法,并确保在每个方法完成后一个接一个地调用它们(使用next()函数)。因此,如何在说完所有5个下一个呼叫中的第二个出现某些数据问题之后如何取消整个订阅?下面是简化的示例代码,供您了解情况。

我正在导入以下数据:

import { Observable } from 'rxjs';

在构造函数中,我准备了我的Observable:

this.myObservable = new Observable( observer => {
  observer.next( this.funcOne(observer) );
  observer.next( this.funcTwo(observer) );
  observer.next( this.funcThr(observer) );
  observer.next( this.funcFor(observer) );
  observer.complete();
} );

然后(下面)使用“ subscribe()”方法,启动订阅:

this.subscription = this.myObservable.subscribe( x => {
  if( x === -1 )
    this.subscription.unsubscribe(); 
    // I was thinking to unsubscribe here, but that doesn't work. 
    // I get a message saying: Cannot read property 'unsubscribe' of undefined
  else
    this.doSomethingElse(x)
} )

如何通过取消或取消订阅完全停止一切?希望我的问题很清楚,并感谢您抽出宝贵的时间阅读我的沮丧内容。

1 个答案:

答案 0 :(得分:0)

虽然我不太了解您对流的使用,但取消订阅的一种方法是保留布尔类型的Subject并使用takeUntil(或pipe(takeUntil)取决于您的rxjs版本)以及何时停止您可以对该订阅执行.next(true)订阅。这样将结束订阅。 示例:

private destroy$ = new Subject();
...
this.subscription = this.myObservable.pipe(takeUntil(this.destroy$)).subscribe( x => {
  if( x === -1 )
    this.destroy$.next(true); 
    // I was thinking to unsubscribe here, but that doesn't work. 
    // I get a message saying: Cannot read property 'unsubscribe' of undefined
  else
    this.doSomethingElse(x)
} )

希望这会有所帮助。