2017-05-24 5 views
0

In meinem Angular-Projekt nenne ich die Methode ConnectToHueBridge() und listAllGoups() von ngOnInit(). Es scheint mir, dass beide Methoden parallel ausgeführt werden. Aber ich muss zuerst ConnectToHueBridge() und dann listAllGoups() ausführen. Wie kann ich das machen?ngOnInit() führt Methos parallel?

var MyHue = new huepi(); 

@Component({ 

selector: 'my-app', 
template: ` 
<h1>Hello {{name}}</h1> 
<div> 
    <ul> 
    <li *ngFor="let group of lightgroups"> 
     {{group}} 
    </li> 
    </ul> 
</div> 
<Button (click)="listAllGroups()"> Get Groups</Button>`, 
}) 

export class AppComponent { 
    name = 'Angular'; 
    lightgroups: string[] = []; 

constructor(){ 
} 

ngOnInit(){ 
    this.ConnectToHueBridge(MyHue); 
    this.listAllGroups(); 
} 

listAllGroups(){ 
    for(var g in MyHue.Groups){ 
    this.lightgroups.push(g); 
    } 
    console.log("done loading groups"); 
} 

ConnectToHueBridge(MyHue:any){ 
//do some stuff 
} 
} 
} 

Wenn ich auf die Schaltfläche klicke, um die Methode auszuführen, funktioniert alles gut. Wie kann ich die Methoden nacheinander ausführen?

Antwort

1

Sie müssen sie beobachtbar machen.

ConnectToHueBridge(MyHue:any): Observable<any> { 
    //do some stuff 
    return Observable.of(true); 
} 

Dann in Ihrem ngOnInit tun dies

ngOnInit() { 
    this.ConnectToHueBridge('xxx').subscribe(data => { 
     // data = true, you can change it in your function 
     this.listAllGroups(); 
    }); 
} 
+0

dies nicht für mich arbeiten, immer noch das gleiche Problem. Ich habe einige console.log() in der 'ConnectToHueBridge()' Methode und eine console.log() in 'listAllGroups()' Methode aber die Ausgabe in der Browser-Konsole ist gemischt. Es sollte zuerst alle Logs von 'connectToHueBridge()' und dann alle von 'listAllGroups()' geben, damit ich weiß, dass die Daten bereit sind, sie im HTML anzuzeigen. Wenn ich die Taste erneut drücke, um 'listAllGroups()' erneut auszuführen, werden die Daten in HTML angezeigt. – WeSt

+0

Hast du noch andere Ideen? – WeSt

+0

Ich habe herausgefunden, dass das 'MyHue'-Objekt nicht bereit ist, wenn' listAllGroups() 'ausgeführt wird, also die for-Schleife überspringt und nur die console.log() anzeigt. Nachdem der HTML-Code angezeigt wird, drücke ich den Knopf Um 'listAllGroups()' erneut auszuführen, wird die for-Schleife ausgeführt und der Inhalt wird im HTML-Code angezeigt. Haben Sie weitere Ideen, um das Problem zu lösen? – WeSt