0
    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 的所有位置。在 Location 中有一个名为 IP 的变量,其中一些是未定义的。这就是为什么我有 if 语句来检查它们是否未定义的原因。如果它们确实未定义,我会在每个位置内进行更彻底的搜索并获取适当的 IP 名称。然后我将 loc.ip 设置为适当的 this.data.IP 名称。但是,jsonData 数组连接数据而无需等待我设置未定义的 ip 名称,因为它们是异步的。如何让 jsonData 等待连接,直到所有位置 ip 都未定义?

4

1 回答 1

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);
                }
            });


        });

请注意,我没有运行此代码,它只是作为说明。

于 2017-07-20T20:02:38.197 回答