this.obsData
.concatMap((vhosts) => this.apiService.findVH(vhosts))
.subscribe((data) => {
this.data = data.docs[0]
this.data.Locations.forEach((loc, index) => {
if (loc.ip=== undefined) {
this.apiService.findLocation(loc)
.subscribe((data) => {
this.data = data.docs[0]
this.idIP = this.data.ip;
loc.ip== this.idIP ;
})
}
});
this.jsonData = this.jsonData.concat(this.data);
});
在这里,我从每个vhost获取数据并将它们连接到一个名为jsonData的整个数组,该数组将包含每个vhost的所有位置。位置中有一个名为IP的变量,其中一些是未定义的。这就是为什么我有if语句来检查它们是否未定义。如果它们确实未定义,我会在每个位置内进行更彻底的搜索并获得相应的IP名称。然后我将loc.ip设置为适当的this.data.IP名称。但是,jsonData数组连接数据而不等待我设置未定义的ip名称,因为它们是异步的。如何让jsonData等待连接,直到所有的位置ips都没有被定义?
答案 0 :(得分:0)
由于您的代码无法按原样运行,因此难以提供良好的答案。据我所知,您可以尝试在每次迭代后追加,同时假设jsonData
为数组:
this.jsonData = []; //or however it is initialized
this.obsData
.concatMap((vhosts) => this.apiService.findVH(vhosts))
.subscribe((data) => {
//this.data = data.docs[0]
let dat = data.docs[0];
this.data.Locations.forEach((loc, index) => {
if (loc.ip=== undefined) {
this.apiService.findLocation(loc)
.subscribe((data) => {
//this.data = data.docs[0]
dat = data.docs[0]
this.idIP = this.data.ip;
loc.ip== this.idIP ;
this.jsonData.append(dat);
})
} else {
this.jsonData.append(dat);
}
});
});
请注意,我没有运行此代码,仅仅是为了说明。