我在javascript中遇到變量作用域問題。我有以下代碼可以正常工作,但this.myUser
的值在.subscribe(...)
塊之外時變爲undefined
。我不明白爲什麼,因爲它是一個類varibale。這裏是我的代碼:Javascropt中的變量範圍
private myUser: User;
login(username: string, password: string): User {
this.http.get(this.loginUrl + '?username=' + username + '&password=' + password)
.map((response : Response) => response.json())
.subscribe(data => {
console.log('data inside', data);
this.myUser = data;
console.log('user inside', this.myUser);
}
);
console.log('user outside', this.myUser);
return this.myUser;
}
下面是從控制檯日誌的結果:我使用angular 4
與bootstrap 4
(但我不認爲有任何關於這個問題的影響)。 感謝您的任何提示。
編輯 我紅下面的鏈接,所以我嘗試添加promise
到我的代碼來管理異步調用。在線教程似乎一切都很簡單(太簡單的確,包括Angular
官方參考),所以我結束了這樣的事情:
this.http.get(this.loginUrl + '?username=' + username + '&password=' + password)
.toPromise()
.then(data => {
console.log('data inside', data);
this.myUser = data.json() as User;
console.log('user inside', this.myUser);
})
.catch(console.log.bind('Error!'));
但它不會對應用流產生任何影響。我會繼續嘗試,但任何幫助將不勝感激。
我試過你的解決方案,但它似乎完全跳過'this.http.get(...)'函數,因爲它只記錄最後一條語句。 – esseara