[英]Ionic 2: stop an http request
我的提供者为http.get
请求提供了一个API:
join(){
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('x-access-token',this.getToken());
return Observable.create(observer =>{
this.http.get('/localhost/chat/'+this.room,{headers : headers})
.map(res => res.json())
.subscribe(
data=>{
observer.next(data);
},
(err) =>{
observer.error(err);
}
);
})
}
我的page.ts
只是周期性地使用此API:
join(){
this.myProvider.join().subscribe(
(data)=>{
if(data.success){
... /* doing smt */ ....
this.join();
}else{
this.message=data.message;
//TBD sleep....
//this.join();
}
},
(err) => {
this.message="Connectivity with server Lost...";
});
}
我的问题是:我想在page.ts
中编写一个函数以停止此循环。 如何取消待处理的获取请求?
一个不起作用的解决方案是我试图在我的page.ts
保留一个指向可观察对象的指针:
export class Page {
...
join_channel: any;
join(){
this.join_channel = this.myProvider.join().subscribe(
(data)=>{
...
this.join();
...
然后,我通过调用this.join_channel.unsubscribe()
来关闭请求,因此在我的情况下:
ionViewWillLeave() {
this.join_channel.unsubscribe();
delete this;
}
但是,即使取消订阅,get请求仍在等待处理中。 因此,当我尝试再次在页面中输入内容时,新的join()
第一步不会收到http.get响应,因为答案将在之前仍待处理的前一个请求中使用。
使用来自rxjs的超时
this.http.get(API)
.timeout(2000)
.map(res => res.json()).subscribe((data) => {
return data;
},
(err) => {
return err;
}
);
不要忘记导入import 'rxjs/add/operator/timeout';
如果使用angular 6
,则必须使用
管(超时(2000))
this.http.get(API)
.pipe(timeout(2000))
.map(res => res.json()).subscribe((data) => {
return data;
},
(err) => {
return err;
}
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.