我经常遇到很多http.get
的电话,这给我带来了很多不同的观点。
我需要将它们全部放入数组并在网格中打印:
这就是我的做法:
用户输入interval
时:
ngOnChanges() {
if (this.interval) {
for (let id of this.ids) {
this.loadData(id);
}
}
this.initializeCols();
}
我调用loadData(id);
方法,该方法使用ForkJoin创建数据:
private loadData(id: string) {
let url = DataService.url+ '/data/' + id + '/points';
// Generate API requests
let observables = [];
observables.push(this.http.get(url, DataService.contentTypeJsonHeaders).map(r => r.json()));
// const myPromise = val =>
// new Promise(resolve =>
// setTimeout(() => resolve(`Promise Resolved: ${val}`), 10000)
// );
// of(observables).pipe(mergeMap(q => forkJoin(...q.map(myPromise)))).subscribe(
// val => this.model.push(val));
Observable.forkJoin(observables).subscribe((response: any[]) => {
for (let i = 0; i < response.length; i++) {
let dataArray: Datapoints[] = ArrayFlattener.Inflate(response[i].data);
for (let d of dataArray) {
const temp = {
id: id,
time: d.time,
value: d.value,
originalTime: d.time,
originalValue: d.value,
interval: d.interval,
metric: DataService.GetById(stream.metricId).name
};
this.model.push(temp);
}
}
});
}
但是我无法等到model
完全填满数据,然后将其打印到网格中。我用其他尝试在loadData()
方法中留下了一些注释掉的代码。问题是,除非单击“添加新”按钮或进行其他调用,否则我不会在网格中看到模型数据,因为它只有在所有调用完成后才应填充网格。我的ForkJoin出了什么问题?
答案 0 :(得分:0)
您不应将可观察对象作为单个数组论证进行传递,而应将多个论证作为传递。
尝试使用spread operator
:Observable.forkJoin(...observables)