我在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