如果我们谈论 Angular 2,您可能会通过以下方式调用您的 API:
this.http.get('url').map(res => { ... }).catch(error => { ... });
它返回 Observable,一旦你订阅它,它就会返回一个订阅。一旦您取消订阅 - 它将取消您的请求。查看完整示例:
service.ts
getData(): Observable<any> {
return this.http.get('url').map(res => { ... }).catch(error => { ... });
}
component.ts
requestSubscription: Subscription;
ngOnInit() {
this.requestSubscription = this.service.getData().subscribe(data => { ... });
}
someFuncWhereYouHandlePOSTSuccess() {
if (this.requestSubscription) {
this.requestSubscription.unsubscribe();
}
}
希望这个概念足够清楚。如果没有 - 我已经准备好回答你的问题了。
编辑
由于 OP 引导我走上正确的道路,我认为我的解决方案属于他的建议作为正确答案。
解决方案服务.ts
private breakPolling: boolean = false;
constructor(private httpClient: HttpClient) {
}
getData() {
return this.httpClient
.get(this.url)
.map((response) => {
if (this.breakPolling) {
this.breakPolling = false;
return Observable.empty();
} else {
return response;
}
});
}
breakPolling() {
this.breakPolling = true;
return Observable.empty();
}
我调度了一个动作,它将调用breakPolling() 方法并设置一个简单的布尔值。我没有将响应数据作为 observable 返回,而是返回一个空的 Observable。
它不会取消请求,但会阻止其数据被传递。它很丑,但它会修补。