私は非常に単純なコードを持っていますが、私はそれを理解することができません。Angular2約束を混同した
私はので、私は、Webページ上のユーザー名とディスプレイをログに記録を取得するには、以下のやっている現在のユーザー名に
を返すサービスを提供しています。現在ログインしているユーザーは「デモ」です
this.userData.getUsername().then(value => {
this.username = value ;
console.log("Inside -->" + value);
});
console.log("Outside -- >" + this.username);
これで、このコードを実行しました。私は、これは、両方のケースでは、この表示「デモ」 Outside -- >undefined Inside -->demo
にconsole.log Shoulnd'tの出力であるthis.username
にユーザ名を得ることはありません。 (内側と外側) なぜ外側が未定義ですか?
ご理解ください。
呼び出しが非同期であるためです。それは 'getUsername()'メソッドの実行を開始しますが、実行している間は続行されます。だから 'this.username'が未定義の外部ログを最初にヒットし、メソッドが終了してInsideログを取得します –
Angular 2には何も関係ありません。これは非同期呼び出しが動作する方法です(https ://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests) –