最近在使用angularfire2(5.0.0-rc.11) 加 firebase(5.3.1) 套件在Angular 6 上面的小問題。
簡單的說我透過Google Firebase Service提供的Cloud Database放了一個使用者的資料內容欄位為 email , name與avatar這三個欄位。接著API來跟Firebase的Cloud Database拿使用者料顯示在網頁上。
2. 然後再用firebase套件提供的api加上這個使用者的uid去向Cloud Database拿資料。(拿database的資料說明請看這邊)
在流程1 中我們透過 AngularFireAuth.user可以取得user相關資料,由於AngularFireAuth.user他會返回一個Observable<firebase.User>的物件,所以最簡單的作法就是在subscribe內取出user的uid 然後在把firebase的database的相關設定設定好程式碼如下:
但是發現使用Promise的then方法卻沒有印user這個物件!於是上網查了一下原來這邊轉成Promise後由於AngularFireAuth並沒有觸發執行因此Promise也就無法解析到任何東西,所以只要在this.afAuth.user用first()觸發執行後再轉Promise就可以正常使用了。
當然其實這樣做只是多"崖給"(台語),用subscribe就可以解決我要做的事情...... 嗯~所以只是我突然想要釐清的問題而已。😆
簡單的說我透過Google Firebase Service提供的Cloud Database放了一個使用者的資料內容欄位為 email , name與avatar這三個欄位。接著API來跟Firebase的Cloud Database拿使用者料顯示在網頁上。
流程上:
1. 先拿到使用者的uuid。2. 然後再用firebase套件提供的api加上這個使用者的uid去向Cloud Database拿資料。(拿database的資料說明請看這邊)
在流程1 中我們透過 AngularFireAuth.user可以取得user相關資料,由於AngularFireAuth.user他會返回一個Observable<firebase.User>的物件,所以最簡單的作法就是在subscribe內取出user的uid 然後在把firebase的database的相關設定設定好程式碼如下:
this.afAuth.user.subscribe(
user => {
this.uuid = user.uid;
this.database = this.db.database.ref('users/' + this.uuid);
}
);
- this.afAuth 是 AngularFireAuth
- this.database 是一個 firebase.database.Reference物件
- this.db 是 AngularFireDatabase物件
this.afAuth.user.toPromise().then( user => console.log(user));
但是發現使用Promise的then方法卻沒有印user這個物件!於是上網查了一下原來這邊轉成Promise後由於AngularFireAuth並沒有觸發執行因此Promise也就無法解析到任何東西,所以只要在this.afAuth.user用first()觸發執行後再轉Promise就可以正常使用了。
this.afAuth.user.pipe(first()).toPromise().then( user => console.log(user));
- first() 為rxjs的一個operators相關資訊可以參考這邊 "first()"
當然其實這樣做只是多"崖給"(台語),用subscribe就可以解決我要做的事情...... 嗯~所以只是我突然想要釐清的問題而已。😆
留言
張貼留言