离子2:停止HTTP请求



我的提供商可为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;
  }

但是,即使是取消订阅,获取请求仍在那里;因此,当我尝试在页面上再次输入时,新的join()无法在第一步中收到http。Div>

使用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;
      }
    );

相关内容

  • 没有找到相关文章

最新更新