【发布时间】:2019-07-06 15:24:55
【问题描述】:
我一直在尝试将值添加到我的 data 数组中,但是我遇到了一个问题,它在返回 getValue 函数的值之前到达 data.push()。我一直在尝试修复它,但无法想出解决方案,感觉有点迷失在这里。
这是我形成数据的函数:
formData() {
for (const id of Object.keys(this.cols)) {
let p= cols[id];
switch (p.name) {
case 'a':
this.temp.name= this.addValue(m, p);
break;
case 'b':
let idx = 1;
let surname= this.getValue(idx);
break;
}
}
this.data.push(this.temp);
});
这就是我的 getValue 函数的样子:
getValue(id: string) {
let url = this.baseUrl + '/streams/' + id+ '/data?';
url += 'from=' + from + '&';
url += 'to=' + to;
this.http.get(url).map(r => r.json()).subscribe((response: any) => {
if (response.data.values[0] !== null && response.data.values[0] !== undefined) {
return response.data.values[0];
}
}, (error: any) => {
return null;
});
如何避免在该值实际存在之前将数据推送到数组?
【问题讨论】:
-
您没有订阅该服务。服务返回一个 Observable,组件订阅。阅读有关 RxJS 和 observables 的 Angular 文档。
-
这个问题有很多内容。您正在遍历一个数组,其中每个循环可能需要也可能不需要对服务的异步调用,然后您希望等待所有异步调用都已解决,然后再在循环结束时执行某些操作!
-
您可以(并且应该)订阅
formData(),但要提供答案,您必须显示formData()的完整代码(您似乎没有)。在this.addValue(m, p)中m来自哪里?在let surname= this.getValue(idx);中,您实际上对返回值做了什么?surname从未使用过!如果您只使用id从this.cols获取值,for (const id of Object.keys(this.cols))可能是for (const p of Object.values(this.cols))。
标签: angular typescript subscription