2016-01-31 9 views
6

Ich bin mit der Tutorial Anweisung für Angular2 hier folgend zusammen: https://angular.io/docs/ts/latest/tutorial/toh-pt4.htmlWie werden in Angular2 Dienstwerte zurückgegeben?

An einem Punkt, stellt sie fest, dass die Service-Versprechen Informationen zurück an die Komponente zurückzukehren, wird die folgende Syntax erforderlich:

getHeroes() { 
    this._heroService.getHeroes().then(heroes => this.heroes = heroes); 
} 

Ich versuche genau zu verstehen, was hier passiert, obwohl ich neu in Angular2 und TypeScript bin. Die Dokumentation sagt:

Unser Rückruf legt die Helden-Eigenschaft der Komponente auf das Array von Helden, die von dem Dienst zurückgegeben werden.

Ich bin verwirrt darüber, was in den Klammern passiert, und insbesondere, wo die letzten "Helden" herkommen. Der Dienst, so weit ich es erzählen kann, gibt "Helden" nicht zurück. Stattdessen importiert und gibt es HEROES von Scheinhelden, die selbst die Heroes-Schnittstelle verwenden und das HEROES-Array zurückgeben. Ich sehe "Helden" (Kleinbuchstaben) in keinem davon.

Werden "Helden" im laufenden Betrieb erstellt? Kann jemand in etwas mehr Detail erklären, was jeder Teil von:

heroes => this.heroes = heroes 

tut? Vielen Dank.

Antwort

12

Das erste, was zu beachten ist, dass die Methode heroService.getHeroes() keine Helden zurückkehrt, sondern ein Versprechen, das schließlich beheben, um eine Liste der Helden Rückkehr:

getHeroes() { 
    return Promise.resolve(HEROES); 
} 

Läßt dann ein bisschen diese Zeile von sezieren Code:

this._heroService.getHeroes().then(heroes => this.heroes = heroes); 

Dies auch in der folgenden Art und Weise wurde geschrieben könnte:

this._heroService.getHeroes().then(function(heroesFromPromise) { 
    this.heroes = heroesFromPromise; 
}); 

Dies bedeutet, rufen Sie die _heroService.getHeroes() Methode, die eine Zusage zurückgibt. Wenn das Versprechen verrechnet wird, wird der Rückruf innerhalb von then mit dem Ergebnis des Versprechens aufgerufen.

Wenn dies passiert, wird der Callback aufgerufen, der die Ausgabe des Versprechens (heroesPromise) übernimmt und der this.heroes Mitgliedsvariablen zuweist.

+0

Ah, wenn ich Sie richtig verstehe, könnten wir "Helden" als Ausgangsvariable ersetzen und es wie auch immer nennen? : 'this._heroService.getHeroes(). Then (xxx => this.heroes = xxx)' oder noch ausführlicher: 'this._heroService.getHeroes(). Then (promiseReturnValue => this.heroes = promiseReturnValue)' – daprezjer

+0

ja das ist richtig, xxx ist der Versprechen Rückgabewert, Sie könnten der Variablen einen Namen geben, wie Sie –

+0

erwähnen Danke für Ihre Hilfe! – daprezjer

Verwandte Themen