2017-09-17 3 views
1
export class InferencePageComponent implements OnInit { 

    constructor(private campaignService: CampaignService) { 
    this.campaignService.getStrategy1().subscribe(data => { 
     this.Strategy1 = data; 
    }); 
    this.campaignService.getStrategy2().subscribe(data => { 
     this.Strategy2 = data; 
    }); 
    this.campaignService.getStrategy3().subscribe(data => { 
     this.Strategy3 = data; 
    }); 
    } 

Ich habe Daten von 3 verschiedenen Funktionen eines Dienstes wie oben. Ich habe auch eine Funktion, die Daten, die von diesen 3 Diensten geladen werden, übernimmt und etwas daran verarbeitet. Aber ich kann die Funktion nicht laden, nachdem alle diese 3 Dienste vollständig geladen sind. Was sollte der richtige Ansatz sein?Angular 2: Wie erzwinge, eine Funktion auszuführen, nachdem alle Dienste bereit sind?

Antwort

0

Sie es handhaben von forkJoin wird forkJoin Daten zurück, wenn alle Anrufe beendet sind und das Rückergebnis

Sie behandeln alle diese Anrufe innerhalb eines Service forkJoin mit und zeichnen es im Inneren des Bauteils, sobald Sie die Daten erhalten Sie können die andere Funktion aufrufen.

Merging http observables using forkjoin

die auch wäre der beste Weg, um es zu lösen, Sie observable.zip es tun können sich auf Ihre Komponente.

0

können Sie Observable.zip() verwenden, Unten ist das Code-Snippet, das Ihnen helfen kann.

import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/observable/zip'; 
// then in your component, do as below : 
Observable.zip( 
this.campaignService.getStrategy1(), 
this.campaignService.getStrategy2(), 
this.campaignService.getStrategy3() 
).subscribe(([Strategy1Data,Strategy2Data, Strategy3Data])) => { 
    this.Strategy1 = Strategy1Data; 
    this.Strategy2 = Strategy2Data; 
    this.Strategy3 = Strategy3Data; 
    this.yourFunctionForExtraProcess(); 
} 
Verwandte Themen