2016-08-09 10 views
1

ich irgendwie will zwei Anfragen auf meinen Server zu senden, erhält Liste von Objekten (DocumentComponent) und in diesem DocumentComponent habe ich eine Liste des Objekt DocumentContentsObservable.forkJoin rxJs Anfragen innerhalb einer anderen Anfrage

so brauche ich, dass nach jedes Mal, wenn ich ein Objekt DocumentComponent bekommen bekomme ich auch seine DocumentContents

this.gridService.getAllDocumentComponentByTemplate(1) 
      .subscribe(data => { 
        this.documentComponents = data; 
        console.log(this.documentComponents); 
        for (var component of this.documentComponents) { 
          this.getAllDocumentContents(component.id); 
        } 
       }, 
       error => alert('Erreur ' + error), 
       () => { 
        console.log("finished "); 
       } 
      ); 

aber diese Methode funktioniert nicht parallel ich für die neuesten DocumentComponent gerade die letzte Liste der Documentcontent erhalten

so, wie man verwendet Observable.forkJoin oder ob es eine andere Art und Weise zu tun, dass es Ihnen danken

Observable.forkJoin(
      this.gridService.getAllDocumentComponentByTemplate(1), 
      this.gridService.getAllDocumentContentByDocumentComponent(**id**) 
     ).subscribe(data => { 
      this.documentComponents = data[0]; 
      this.documentContents = data[1]; 
     }, 
      err => console.error(err) 
    ); 

Ich habe versucht, aber ich bekomme die aktuelle Liste der DocumentContents, weil ich als ID in der zweiten Methode setzte getAllDocumentContentByDocumentComponent als statisches Wert muss ich es variable

vielen Dank für Ihre Zeit würde

getAllDocumentContentByDocumentComponent(idDocumentComponent:number) { 
     return this._http.get('http://localhost:8080/template/getAllDocumentContentByDocumentComponent/' + idDocumentComponent) 
      .map(res => res.json()); 
    } 
    getAllDocumentComponentByTemplate(idDocument:number) { 
     return this._http.get('http://localhost:8080/template/getAllDocumentComponentByTemplate/' + idDocument) 
      .map(res => res.json()); 
    } 
+0

Was ist genau die 'id' und um es von der vorherigen Anfrage zu bekommen? Vielen Dank! –

+0

Die ID ist die fremde ID von DocumentContent von DocumentComponent von dieser ID habe ich Zugriff auf alle DocumentContent der aktuellen DocumentComponent –

+0

Okay. 'getAllDocumentComponentByTemplate' gibt eine Liste von' DocumentComponent' zurück? oder ein einzelner? –

Antwort

0

ich versuche, so etwas machen:

this.gridService.getAllDocumentComponentByTemplate(1) 
    .flatMap(documentComponents => { 
     let contentObservables = documentComponents.map(documentComponent => { 
     return this.gridService.getAllDocumentContentByDocumentComponent(
      documentComponent.id); 
     }); 

     return Observable.forkJoin([ 
     Observable.of(documentComponents), 
     ...contentObservables 
     ]); 
    }) 

Zuerst erhalten Sie die Dokumentkomponenten, bauen Sie die Observables, um Inhalte für jede Komponente zu erhalten, und führen Sie dann alle parallel unter Verwendung forkJoin.

Beachten Sie die Verwendung von Observable.of, um das Ergebnis der ersten Anforderung abrufen zu können.

Verwandte Themen