我有以下代码在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
令人惊讶的是,它工作了一段时间,我不确定我是否改变了其他任何东西,但它停止了工作。
代码中的注释部分非常有效。
答案 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();