我没有rxjs 6与角度6与间隔,switchMap和地图

时间:2018-05-06 14:35:49

标签: angular rxjs rxjs6

我想将我的rxjs代码更新为6,我得不到它。

在我每隔5秒对下面进行一次新的数据调查之前:

import { Observable, interval } from 'rxjs';
import { switchMap, map } from 'rxjs/operators';

var result = interval(5000).switchMap(() => this._authHttp.get(url)).map(res => res.json().results);

现在......当然,它已经坏了,文档让我无处可去。

如何编写以上内容以符合rxjs 6?

由于

2 个答案:

答案 0 :(得分:33)

代码应该类似于以下内容。您需要使用pipe运算符。

import { interval } from 'rxjs';
import { switchMap, map } from 'rxjs/operators';

const result = interval(5000).pipe(
switchMap(() => this._authHttp.get(url)),    
map(res => res.results)
)

答案 1 :(得分:3)

经过大量研究,我可以从RxJs 6的Angular 6中得出以下更新的方法

每隔5秒就会调用一次搜索API,并且一旦计数> 5就会取消订阅:

let inter=interval(5000)

let model : ModelComponent;
model=new ModelComponent();
model.emailAddress="mdshahabaz.khan@gmail.com";


let count=1;
this.subscriber=inter.pipe(
          startWith(0),
          switchMap(()=>this.asyncService.makeRequest('search',model))
        ).subscribe(response => {
          console.log("polling")
          console.log(response.list)
          count+=1;
          if(count > 5){
            this.subscriber.unsubscribe();
          }
        });

API请求:

   makeRequest(method, body) : Observable<any> {
    const url = this.baseurl + "/" + method;

    const headers = new Headers();
    this.token="Bearer"+" "+localStorage.getItem('token'); 
    headers.append('Authorization', this.token);
    headers.append('Content-Type','application/json');

    const options = new RequestOptions({headers: headers});
    return this.http.post(url, body, options).pipe(
        map((response : Response) => {
            var json = response.json();                

           return json; 
        })
    );
}

别忘了取消订阅以避免内存泄漏。

ngOnDestroy(): void {
if(this.subscriber){
  this.subscriber.unsubscribe();
}

}