2016-07-27 21 views
2

Ich habe zwei Funktionen:Verspricht in Ionic 2/Angular 2, wie?

this.geQuizStorage(); 
this.getQuizData(); 

geQuizStorage() { 
    this.quizStorage.getAnswers().then(data => { 
     return data; 
    }); 
} 

getQuizData() { 
    this.quizData.getQuiz().then(data => { 
     return data; 
    }); 
} 

ich Gebrauch Versprechen für die 2 Funktionen versuchen und warten, bis beide fertig sind, so etwas wie:

http.when(this.geQuizStorage(), this.getQuizData()).when(data => { 
    // data[0] first function response 
    // data[1] 
}) 

alle Ideen, wie diese 2/in Ionic zu tun Winkel 2

Antwort

5

Sie können dies mit all Funktion des ES6 Versprechen. Keine Notwendigkeit für externe Bibliotheken.

Promise.all([this.geQuizStorage(), this.getQuizData()]).then(data => { 
    //do stuff with data[0], data[1] 
}); 

Ihre Funktionen sollten für diese Arbeit verspricht, um zurückzukehren, so schlage ich vor, die folgende Änderung:

geQuizStorage() { 
    return this.quizStorage.getAnswers().then(data => { 
     return data; 
    }); 
} 

getQuizData() { 
    return this.quizData.getQuiz().then(data => { 
     return data; 
    }); 
} 
+0

Sie nicht, dass ich einige Versprechen zu lösen und bringen Sie es in meinen 2-Funktionen? – Patrioticcow

+0

Ich habe den Teil vermisst, wo deine Funktionen keine Versprechen abgeben ... aber alles, was du brauchst, ist, 'getQuizStorage' und' getQuizData' zu versprechen. Dies kann leicht erreicht werden, indem vor dem Aufruf der Service-Funktion "return" hinzugefügt wird. Siehe bearbeitete Antwort. – yarons

+0

Können Sie Daten zurückgeben? –

3

Grundsätzlich müssen Sie keine weitere Wrapperfunktion für Ihren Serviceaufruf erstellen, nur um Daten zurückzugeben (es sei denn, Sie haben Ihre Validierungslogik zur Validierung von Daten zur Verfügung). Übergeben Sie dann diese beiden Funktionen in Observable.forkJoin durch Übergeben der Methode promises/observable's & subscribe über diese beobachtbare warten, bis diese vollständig sind.

Observable.forkJoin([this.getQuizData(),this.geQuizStorage()]) 
    .subscribe(data => { 
    console.log(data[0], data[1]); 
    //both call succeeded 
});