2017-12-27 231 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