使用Observable

时间:2016-02-24 03:31:33

标签: json angular observable rxjs

我有以下代码在AngularJS 2中进行轮询GET请求:

 makeHtpGetRequest(){
            let url ="http://bento/supervisor/info";
            return Observable.interval(2000)
                .map(res => res.json()) //Error here
                .switchMap(() => this.http.get(url));

            /*
    This portion works well
    return this.http.get(url)
                .map(res =>res.json());*/
        }

TypeScript给我一个错误,以JSON格式制作响应(检查代码中的注释。

TypeError: res.json is not a function

令人惊讶的是,它工作了一段时间,我不确定我是否改变了其他任何东西,但它停止了工作。

代码中的注释部分非常有效。

3 个答案:

答案 0 :(得分:12)

尝试

return Observable.interval(2000) 
        .switchMap(() => this.http.get(url))
        .map(res:Response => res.json());

答案 1 :(得分:5)

可能为时已晚,但可能仍有助于某人。

根据doc

  

这不是Angular自己的设计。 Angular HTTP客户端遵循由Fetch函数返回的响应对象的ES2015规范。该规范定义了一个json()方法,它将响应主体解析为JavaScript对象。

我认为json函数只存在于http的响应中

我会尝试

return Observable.interval(2000) 
        .switchMap(() => this.http.get(url).map(res:Response => res.json()));

答案 2 :(得分:2)

你可以做的是,不要忘记清理setInveral,否则它会永远运行:

let myObservable = new Observable(observer => {
     let count = 0;
     let interval = setInterval(() => {
           observer.next(count++);
  },2000);

 //disposal function
return() => {
   clearInterval(interval);
 }
});


let subscriber = myObservable.subscribe(
  val => console.log(val),
  err => console.log(err),
  _ => console.log('done')
);

subscriber.unsubscribe();