-1

我在service.TS文件中創建了一個查詢,該查詢顯示基於登錄用戶的項目「狀態」 UID:使用Firebase,firebase.auth()。currentUser即使在記錄中也爲空值

getLists(): FirebaseListObservable<any> { 

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) {console.log("blah", firebase.auth().currentUser.uid) 
    // User is signed in. 
    } 
}); 
    return this.db.list('/foods', { 
    query: { 
     orderByChild: 'state/'+firebase.auth().currentUser.uid+'/state', 
     equalTo: 'listed' 
    } 
    }); 
} 

使用此查詢,我收到一條錯誤:

未捕獲的(在承諾):類型錯誤:null不是一個對象(計算'WEBPACK_IMPORTED_MODULE_2_firebase_app 「權威性」 .curren tUser.uid')。

使用{console.log("blah", firebase.auth().currentUser.uid),你可以在上面看到,正確顯示UID在日誌中,確認該用戶登錄。

我不知道這是否是相關的,但此查詢是由頁面的叫主要TS文件與:

ngOnInit() { 

    this.moviesSvc.getLists() 
        .subscribe(lists => {console.log(lists); console.log("UID", firebase.auth().currentUser.uid); this.lists = lists}) 
    } 

我需要做什麼才能正確地將UID傳遞給查詢?

回答

2

onAuthStateChanged()是異步的,所以當你在其回調用戶uid,那麼只有執行您的操作,像這樣:

getLists(): FirebaseListObservable<any> { 

    var self = this; 

    firebase.auth().onAuthStateChanged(function(user) { 
     if (user) { 
      // User is signed in. 
      var userID = user.uid; 

      return self.db.list('/foods', { 
       query: { 
        orderByChild: 'state/' + userID + '/state', 
        equalTo: 'listed' 
       } 
      }); 
     } 
    }); 

} 
+0

這給了我一個錯誤顯示:_A函數聲明類型既不是「無效'也不'任何'必須返回一個值_。我也收到錯誤:_TypeError:undefined不是一個對象(評估'this.db.list')_和_Uncaught(在promise中):TypeError:undefined不是一個對象(評估'this.movi​​esSvc.getLists() 。訂閱')_。 – cfoster5

+0

@ cfoster5更新了代碼,內部回調中的'this'會有所不同,因此將其緩存爲self並使用它.. –

+0

嘗試此操作仍然會出現上面列出的錯誤。 – cfoster5

相關問題