繁体   English   中英

Ionic 2:停止http请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM