2017-07-20 4 views
0

Hier bekomme ich die Daten von jedem vhost und verknüpfe sie mit einem ganzen Array namens jsonData, das alle Speicherorte jedes vhosts haben würde. Es gibt eine Variable namens IP in einem Standort, und einige davon sind nicht definiert. Deshalb habe ich die if-Anweisung, um zu überprüfen, ob sie nicht definiert sind. Wenn sie tatsächlich undefiniert sind, suche ich in jedem Ort genauer und erhalte den passenden IP-Namen. Dann setze ich den loc.ip auf den entsprechenden Namen this.data.IP. Das Array jsonData verkettet jedoch die Daten, ohne dass ich den undefinierten IP-Namen festlegen muss, da sie asynchron sind. Wie kann ich die jsonData warten, um zu verketten, bis alle Standort-ips nicht undefiniert sind?Angular2- Asynchrone verschachtelte API-Aufrufe

+0

https://Stackoverflow.com/a/40100613/495157 (Filter statt foreach/if) – JGFMK

Antwort

0

Es ist schwierig, eine gute Antwort zu geben, da Ihr Code nicht so ausgeführt werden kann wie er ist. Soweit ich verstanden, könnten Sie versuchen, nach jeder Iteration anhängt, auch jsonData unter der Annahme, ein Array zu sein:

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


     }); 

Wohlgemerkt ich habe nicht diesen Code ausführen es lediglich als Illustration ist.

Verwandte Themen