2016-10-20 6 views
1

Ich habe sehr einfachen Code, aber ich bin nicht in der Lage, es zu verstehen.Verwirrt über Angular2 Versprechen

ich einen Dienst haben, die

aktuelle Benutzername kehrt so mache ich folgenden Benutzernamen und Anzeige auf der Webseite geloggt. Bitte beachten Sie, aktuell angemeldeten Benutzer ist "Demo"

So jetzt, wenn ich diesen Code ausführen. Ich habe nicht Benutzername in this.username

Dies ist die Ausgabe von console.log ist
Outside -- >undefined Inside -->demo
Shoulnd't diese Anzeige 'Demo' in beiden Fällen. (drinnen und draußen) Warum draußen ist undefiniert ??

Bitte helfen Sie mir, dies zu verstehen.

+1

Es ist, weil der Anruf asynchron ist. Es startet die 'getUsername()' Methode, aber während es läuft, geht es weiter. Es trifft also zuerst auf das Outside-Protokoll, wo 'this.username' immer noch undefiniert ist, dann endet die Methode und Sie erhalten das Inside-Protokoll –

+0

Es ist nichts mit Angular 2 zu tun. So funktioniert der asynchrone Aufruf, [mehr hier] (https : //developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests) –

Antwort

2

Dies ist das erwartete Verhalten.

Dies ist ein asynchroner Aufruf, die

this.userData.getUsername().then(value => { 
    this.username = value ; 
    console.log("Inside -->" + value); 
}); 

In der Zwischenzeit Ausführung

hier später kehrt weiter
console.log("Outside -- >" + this.username); 

Wenn der Asynchron-Aufruf abgeschlossen ist schließlich die Promise führt die Funktion

value => { 
    this.username = value ; 
    console.log("Inside -->" + value); 
} 

das war früher passiert.

+0

Danke. Wie bekomme ich dann den Benutzernamen in der globalen Variable (this.username)? – viks

+1

Dies ist, was Ihr Code bereits tut. Worüber du verwirrt zu sein scheinst, ist, was wann passiert. 'this.username = value;' wird viel später als 'console.log (" Outside -> "+ this.username);' –

+1

ausgeführt. Ich bin nur verwirrt und habe den nächsten Schritt nicht programmiert. Ich bekomme tatsächlich den richtigen Wert in der Variablen. Ich hätte mir selbst vertrauen sollen. – viks