我正在尝试从文件中加载一个虚拟的json数据,但似乎angular2 http.get方法无法提取该数据。我正在使用下面的代码。
const obs: Observable<any> = this.http.get('http://localhost:4200/assets/mock-json/cashback.json')
.map((res: Response) => {
console.log('***********',res.json());
res.json(); })
.do((res) => this.loadedCB = res);
if (this.loadedCB) {
return Observable.of(this.loadedCB);
}
即使我在浏览器中手动尝试URL http://localhost:4200/assets/mock-json/cashback.json,它也能正常工作。我不明白为什么它不能与http.get()一起工作。
发布于 2017-06-21 22:25:53
这个问题可能会发生,因为你从来没有订阅过observable,所以它可能会开始执行,因此你不会得到任何结果,因为请求没有发送(你可以在一些web检查器的网络选项卡中查看)。
您应该尝试订阅可观察对象,以便它可以开始执行。
示例:
export class AppComponent implements OnInit {
loadedCB: any;
constructor(public http: Http) {
}
ngOnInit() {
this.tryAndLoad();
}
tryAndLoad() {
this.load().subscribe((res: any) => {
this.loadedCB = res;
if (this.loadedCB) {
console.log(this.loadedCB);
return Observable.of(this.loadedCB);
}
});
}
load() {
return this.http.get('http://localhost:4200/assets/mock-json/cashback.json')
.map((res: Response) => {
console.log('***********', res);
return res.json();
})
}
}
它会正确地返回一个结果,然后您可以随心所欲地处理该值,因为您返回的是一个可观察对象,因此您可以做其他事情(此演示不会处理此问题)
为了不出现this.http.get(...).map错误,还要在页面顶部添加导入'rxjs/Rx';
https://stackoverflow.com/questions/44678483
复制相似问题