【问题标题】:Unsubscribe observable in an Angular service在 Angular 服务中取消订阅 observable
【发布时间】:2022-01-08 16:50:49
【问题描述】:

一旦出现某种状态,我想取消订阅 Angular 服务中的 observable。取消订阅应该在订阅中执行。不幸的是,下面的代码不起作用。

@Injectable()
export class CartManagementUsecase {
  private unsubscribe = new Subject();

  public streamSession(): void {
    this.adapter
        .streamSession()
        .pipe(takeUntil(this.unsubscribe))
        .subscribe((session) => {
          if(session.session_state === SessionState.CLOSED) {
            this.unsubscribe.unsubscribe();
          }
    });
  }
}

【问题讨论】:

  • 问题是你为什么首先在服务方法中进行订阅?
  • this.unsubscribe.next() 而不是 this.unsubscribe.unsubscribe()

标签: javascript angular typescript rxjs


【解决方案1】:

我建议您参加活动,直到 closed 到来。不需要任何主题

public streamSession(): void {
    this.adapter
        .streamSession()
        .pipe(takeWhile(session => session.session_state != SessionState.CLOSED))
        .subscribe((session) => {
          // do something that is required
        });
  }

【讨论】:

    【解决方案2】:

    您需要在您的主题上调用complete,以便takeUntil 取消订阅observable。

    @Injectable()
    export class CartManagementUsecase {
      private unsubscribe = new Subject();
    
      public streamSession(): void {
        this.adapter
            .streamSession()
            .pipe(takeUntil(this.unsubscribe))
            .subscribe((session) => {
              if(session.session_state === SessionState.CLOSED) {
                this.unsubscribe.complete();
              }
        });
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-12
      • 2017-04-13
      • 1970-01-01
      • 2019-12-20
      • 2018-01-17
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多