2017-04-06 54 views
0

Component.ts我爲什麼不能保存從火力服務

ngOnInit() {   
     this.profileService.getBasicProfile(this.uid).subscribe(
     basic => { 
      console.log(basic); //line 1 
      this.usedBasicProfile = basic; 
      console.log(this.usedBasicProfile); //line 2 
     } 
    ) 
     console.log(this.usedBasicProfile); //line 3 
} 

Service.ts

savedBasicProfile: FirebaseObjectObservable<UserBasic>; 

getBasicProfile(uid: string) { 
    this.savedBasicProfile = this.af.database.object('/users/user'+uid); 
    console.log(this.savedBasicProfile); 
    return this.savedBasicProfile; 
} 

1號線和2號線工作的console.log正確地獲得數據,但行3輸出未定義。 任何幫助,將不勝感激。

///////////////////////////編輯

constructor(
    private authService: AuthGuard, 
    private profileService: ProfileService 
) 
{ 
    this.uid = this.authService.getUid();  
    console.log(this.uid); 

    this.profileService.getBasicProfile(this.uid).subscribe(
    basic => { 
     this.usedBasicProfile = basic; //how to make this line work? 
    } 
); 
    console.log(this.usedBasicProfile); 
} 

回答

0

你應該明白參與觀測量的異步處理。

ngOnInit() {   
     this.profileService.getBasicProfile(this.uid) executed 
     console.log(this.usedBasicProfile); //line 3 executed 
} 

首先進行服務呼叫,然後執行第3行。 當返回的數據則只有訂閱將在那個時候被觸發,你會得到的值

.subscribe(///called only when the data is returned 
      basic => { 
       console.log(basic); //line 1 executed 
       this.usedBasicProfile = basic; 
       console.log(this.usedBasicProfile); //line 2 
      } 
+0

謝謝,我知道是什麼問題,但在我試一下,我仍然不知道如何使.subsribe()中的代碼被執行。你能舉個例子嗎?非常感謝 – Mazo

+0

如何讓subscribe()的代碼工作.....我仍然不知道 – Mazo

+0

它不能完成。 Observable的設計就像 – Aravind