2017-12-27 212 views
0
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第一次它在,但在第二记录它的正确信息只说[对象] [对象],但是为什么?这似乎是响应数据仅在该函数中的变量,但失去它后角保存响应数据为可变

回答

0

使用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)即可得出答案。

+0

对我来说没有意义为什么JavaScript认为它应该将它转换为仅在第二个字符串? – Kai

+0

如果您提供确切的输出,这将有所帮助。我认为''this.user'中有一些默认值,因此它会打印预期的输出。在从服务器获取数据之后,您正在分配一个对象。 –

+0

我真正想做的是从我的api获取用户对象,然后将其发送到我的http.service(所有http.get,http.post,http.patch的东西),并将其放入一个类型为user的变量(用户对象有我从api获得的所有东西,如id名称等)在我的http.service我有另一个函数,它返回我以前保存的用户。所以我可以从任何地方访问currentUser,只需调用该函数 – Kai

0

您需要记住,您拥有的任何订阅都是异步代码。

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