2017-07-17 2 views
1

Gibt es einen besseren Weg, dies zu erreichen (immer alle Benutzer mit ihren Fotos):Angular - Nested-API-Aufrufe mit Iteration

this.authHttp.get(this.ApiUrl+'users') 
.map(res => res.json()) 
    .subscribe(users => { 
     for (let user of users) { 
      this.authHttp.get(this.ApiUrl+'users/'+user.id+'/photos') 
      .map(res => res.json()) 
      .subscribe(photos => { 
       user['photos'] = photos; 
       this.items.push(user); 
      }) 
     } 
    }); 

Vielleicht mergeMap mit?

Vielen Dank für Ihre Beratung

Julien

+0

Ja, 'MergeMap' ist eine gute Idee hier –

+0

Danke, das Problem ist, dass ich nicht finden kann, wie man durch Benutzer mit mergeMap iteriert. – bidou88

+0

Was ist das Problem, vor dem Sie stehen? –

Antwort

3

Ich gehe davon aus, dass res.json() ein Sync-Aufruf ist die json als Objekt zurückkehrt, so dass Sie Kette darauf:

this.authHttp.get(this.ApiUrl+'users') 
.mergeMap(res = res.json().users) 
.mergeMap(
    user => this.authHttp.get(this.ApiUrl+'users/'+user.id+'/photos'), 
    (user, photosRes) => { 
    user['photos'] = photosRes.json(); 
    return user; 
    } 
) 
.subscribe(user => this.items.push(user)); 

Dieses Codebeispiel verwendet die mergeMap Überladung, die eine mapFunc(outer,inner) nimmt, so dass Sie Zugriff auf beide haben und sie zusammenführen können, wie Sie es für richtig halten.