【问题标题】:Delete subscription in observer在观察者中删除订阅
【发布时间】:2017-09-14 16:31:42
【问题描述】:

我为我的 Angular 4 表单创建了一个 canDeactivate 处理程序。虽然这可行,但我担心我会导致内存泄漏(因为没有更好的术语)。我读到您必须取消订阅以避免订阅列表不断增加;但我不确定在哪里/如何取消订阅我在下面创建的订阅。 observer.complete 调用会删除订阅吗?

  // Allow the user to navigate away from this page
  public canDeactivate(): Observable<boolean> {

    // Popup a prompt dialog
    const title = 'Lose Changes';
    const prompt = 'Are you sure you want to lose your changes?';
    this.dialogWindow.show(EDialogTypes.EDialogYesNo, EDialogStyles.EDialogStyleWarning, title, prompt);

    return Observable.create(observer => {
      this.dialogWindow.observable.subscribe(buttonPressed => {
        const proceed = (buttonPressed === EButtonPressed.EButtonPressedYes);
        console.log('Allow proceed: ' + proceed);
        observer.next(proceed);
        observer.complete();
      });
    });
  }

【问题讨论】:

    标签: angular subscriptions


    【解决方案1】:

    您可以将订阅保存到一个变量中,并在获得所需内容后使用它来取消订阅。像这样的:

    return Observable.create(observer => {
      let subscription = this.dialogWindow.observable.subscribe(buttonPressed => {
        const proceed = (buttonPressed === EButtonPressed.EButtonPressedYes);
        console.log('Allow proceed: ' + proceed);
        observer.next(proceed);
        observer.complete()
        subscription.unsubscribe(); // here you unsubscribe
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多