订阅和取消订阅在离子打字稿中可观察到

时间:2019-04-22 14:36:50

标签: ionic-framework ionic3 observable subscribe

使用单选列表,其中值分别为5、15、20和30分钟。 默认情况下,选择15分钟。 现在,当选择5秒钟时,我需要不断检查功能。 当选择15秒单选按钮时,取消订阅可观察的5秒钟,并使用可观察的开始15秒钟的子订阅。

当应用程序在后台运行时,我需要不断检查上述情况,即选择了无线电列表值,并根据该值启动Observable。 感谢您的高级帮助。 我在使用离子框架,在哪里使用此代码,但是何时订阅和取消订阅?

 this.timerOneHourSubscription = Observable.interval(15000)
            .subscribe((val) => { 
      }

以下示例:

 timerOneHourSubscription: Subscription;
 constructor() {
    this.showBadge();
   }
  }
 /**
 * This function allows to display badge on app icon
 */
showBadge() {
 //by default one hour subscription
 var refreshInterval = 
localStore.getPersistedData(localApp.ISRADIOGROUP_KEY);
 console.log('refreshInterval', refreshInterval);
 this.timerOneHourSubscription = Observable.interval(refreshInterval)
    .subscribe((val) => {
    if (localStore.getPersistedData(localApp.ISRADIOGROUP_KEY) != null) {
        if (localStore.getPersistedData(local.ISBADGE_ENABLED_KEY) != null) {
            let badgeToggleEnable = local.getPersistedData(local.ISBADGE_ENABLED_KEY);
            if (badgeToggleEnable) {
                if (this.Items != null) {
                    if (localStore.getPersistedData(localApp.ITEMS_KEY) != null) {
                        this.Items = localStore.getPersistedData(localApp.ITEMS_KEY);
                        var count = 0;
                        for (let i = 0; i < this.Items.length; i++) {
                        var unRead= this.Items[i].unRead;
                        if (unRead) {
                           count++;
                        }
                        }
                        this.badge.set(unRead++);
                    }
                }
                }
                else {
                    this.badge.clear();
                    }
                }
            }
    });
}

2 个答案:

答案 0 :(得分:0)

您可以使用以下方法清除您的订阅并调用新的订阅。

Observable.interval(15000).takeUntil(this.onDestroy$)
      .subscribe(() => {

当您要销毁当前订阅并开始新的订阅时,这将为您提供帮助。

要销毁当前的,您可以在下面使用:-

this.onDestroy$.next();

您必须在页面顶部声明以下内容:-

private onDestroy$ = new Subject<void>();

请尝试发送一个方法并一次又一次调用同一方法,而不是在Observable中发送静态值。

答案 1 :(得分:0)

我找到了我的解决方案,然后选择了可取消订阅的单选按钮,然后重新启动

unSubscribetimerhourSubscription() {
  this.timerhourSubscription.unsubscribe();
}