角保存响应数据为可变
问题描述:
user: User
this.httpService.getCurrentUser()
.subscribe(
data => {
this.user = JSON.parse(data["_body"]).value[0];
console.log("1" +this.user)
},
error => console.error(error)
);
console.log("2"+this.user);
因此,在这个功能让我的currentUser,并把它变成我的变量,如果我登录我的this.user第一次它在,但在第二记录它的正确信息只说[对象] [对象],但是为什么?这似乎是响应数据仅在该函数中的变量,但失去它后角保存响应数据为可变
答
使用console.log("2"+this.user);
你告诉的Javascript到this.user
对象首先转换为字符串(这是[object Object]
),然后做CONCAT与2
。
还记得console.log(2...)
会先发生。因为在从服务器获取数据之后将发生console.log(1...)
。
我也看到,而你在打印出来this.user
要指定从服务器到this.User
响应 - 注意资本U.
我的猜测是,你从服务器加载的对象。只需使用console.log(this.user)
即可得出答案。
答
您需要记住,您拥有的任何订阅都是异步代码。
this.httpService.getCurrentUser()
.subscribe(
data => {
// This may or not (probably not) run first
},
error => console.error(error) // This may never run, if error doesn't occurs.
);
// This will run after the subscription is made. Almost always before the success callback.
console.log("2"+this.user);
任何依赖于HTTP请求等异步响应的东西都应该放在里面。
+0
谢谢你帮助我。它的工作现在。 – Kai
对我来说没有意义为什么JavaScript认为它应该将它转换为仅在第二个字符串? – Kai
如果您提供确切的输出,这将有所帮助。我认为''this.user'中有一些默认值,因此它会打印预期的输出。在从服务器获取数据之后,您正在分配一个对象。 –
我真正想做的是从我的api获取用户对象,然后将其发送到我的http.service(所有http.get,http.post,http.patch的东西),并将其放入一个类型为user的变量(用户对象有我从api获得的所有东西,如id名称等)在我的http.service我有另一个函数,它返回我以前保存的用户。所以我可以从任何地方访问currentUser,只需调用该函数 – Kai