我们正在使用8.0,Ionic3,Angular2在IBM_MobileFirst上开发Hybrid_Mobile
应用程序。
问题:我们有调用API的按钮,在获取数据时,用户可以注销应用程序,但是数据仍在加载中,并且过程继续进行。
尝试:退出时,我们正在调用WL.Client.reloadApp()
,这将停止所有API调用并重新启动应用程序,但我只需要停止正在进行的API调用。
答案 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
add
在UnsubscriberService
add(): any {
return takeUntil(this.unsubscriber);
}
请记住,无论如何,都会在后端处理呼叫。