Angular2:注销后如何停止API调用

时间:2019-03-20 02:29:48

标签: angular typescript ibm-mobilefirst angular-hybrid

我们正在使用8.0,Ionic3,Angular2在IBM_MobileFirst上开发Hybrid_Mobile应用程序。

问题:我们有调用API的按钮,在获取数据时,用户可以注销应用程序,但是数据仍在加载中,并且过程继续进行。

尝试:退出时,我们正在调用WL.Client.reloadApp(),这将停止所有API调用并重新启动应用程序,但我只需要停止正在进行的API调用。

2 个答案:

答案 0 :(得分:0)

如果您订阅的是从API获取数据的可观察对象,则可以在组件被销毁(或注销时需要的其他任何触发器)时退订。取消订阅将无法处理数据,例如

import { Component, OnInit, OnDestroy } from '@angular/core';

export class myComponent implements OnInit, OnDestroy {
    ngOnInit() {
        this.sub = this.myService.getApiData()
        .subscribe(
            (response: any) => {
                // process response
            }, 
            (response: any) => {
                // handle error
            }
        );
    }


    ngOnDestroy() {
        this.sub.unsubscribe()
    }
}

答案 1 :(得分:0)

您可以使用takeUntil

https://stackblitz.com/edit/angular-dqln9h?file=src%2Fapp%2Fapp.component.ts

在该示例中,如果您单击“开始呼叫”,您将在控制台中看到模拟呼叫
如果您再次单击并在2秒内单击注销,您将看不到任何内容,因为我们通过调用takeUntil方法通过UnsubscriberService退订

unsubscribeAll() {
    this.unsubscriber.next(true);
  }

这意味着您要在注销时要取消的每个呼叫都必须包括该接线员

this.longRunning().pipe(this.us.add()) // this.us is just the injected service

addUnsubscriberService

中执行以下操作
add(): any {
    return takeUntil(this.unsubscriber);
  }

请记住,无论如何,都会在后端处理呼叫。