在http请求中使用forEach函数时遇到问题。
我有一个_watchlistElements
变量,它包含以下数据:
[{"xid":"DP_049908","name":"t10"},{"xid":"DP_928829","name":"t13"},{"xid":"DP_588690","name":"t14"},{"xid":"DP_891890","name":"t16"},{"xid":"DP_693259","name":"t17"}]
现在,我正在创建一个函数,它将从服务器为每个xid
元素下载数据:
private download() {
this._watchlistElements.forEach(v =>
this.http.get('http://localhost:8080/getValue/' + v.xid)
.subscribe(res => this._values = res.json()));
}
必须将数据作为每个v.xid
值的对象下载,并将其存储在_values
变量中。
private _values: Array<WatchlistComponent> = [];
但不知何故,angular会返回v.xid
元素的错误。它没有看到那个变量。但它有点奇怪,因为当我在控制台中执行它时,我的意思是:将json存储在变量中并在此v.xid
元素上使用forEach函数,一切正常。
[默认] C:\ Users \ src \ app \ appBody \ watchlist \ watchl中的错误 ist.component.ts:51:115 'WatchlistComponent'类型中不存在属性'xid'。
xid
存在...但在_watchlistElements
内部异步下载数据...
我不是100%确定这种方法是对的,但如果您有任何想法如何解决,请告诉我。
答案 0 :(得分:0)
打印_values数组时会发生什么?
上述错误是类型错误。 WatchlistComponent接口是什么样的?它是否包含xid
属性?
您可以通过覆盖类型...
来解决类型错误private download() {
this._watchlistElements.forEach((v as any) =>
this.http.get('http://localhost:8080/getValue/' + v.xid)
.subscribe(res => this._values = res.json()));
}
帮助您更好地构建代码。如果你想结合许多Observable的结果,我会使用像forkJoin这样的东西。
private download():void {
//create an array of Observables
let el$ = _watchlistElements.map(el => {
return this.http.get('http://localhost:8080/getValue/' + el.xid)
.map(res: Response => <any>res.json());
});
//subscribe to all, and store the data, el$ is an array of Observables
Observable.forkJoin(el$).subscribe( data => {
this._values = data; //data will be structured as [res[0], res[1], ...]
});
}
HERE是一个使用上述方法的Plunker。 https://plnkr.co/edit/woXUIDa0gc55WJPOZMKh?p=preview