1

我使用onAuthStateChange observer成功檢查用戶的身份驗證狀態,並將用戶重定向到Dashboard頁面(react-native項目)。但是,在儀表板上,我已經想要顯示一些用戶特定的數據,例如登記的節目/統計。爲此,我需要初始化和填充currentUser對象,這需要一些時間(我需要從那裏獲得來自數據庫的一些數據)。因此,我正在尋找一些方法來等待這個過程成功完成。我想要做的是在componentDidMount中使用async/await語法,但返回的結果爲null。 (相同的語法成功的作品在其他屏幕,但未能在第一個)獲取firebase.auth()。currentUser with async/await

async componentDidMount() { 
    try { 
    let uid = await firebase.auth().currentUser.uid; 
    console.log(uid); 
    } catch(error) { 
    console.log(error); 
    } 
} 

什麼可以等待currentUser對象使用異步/ AWAIT語法加載的最佳方式?我認爲,原因可能是firebase返回null作爲第一個結果,然後將uid更正爲第二個結果。

對於現在的解決方法,我使用了簡單的setInterval函數,但我不想增加大量的加載時間。

let waitForCurrentUser = setInterval(() => { 
    if (firebase.auth().currentUser.uid !== null) { 
     clearInterval(waitForCurrentUser); 
     let uid = firebase.auth().currentUser.uid; 
     this.setState({uid}); 
     return firebase.auth().currentUser.uid; 
    } else { 
     console.log('Wait for it'); 
    } 
    }, 700); 

回答

0
setInterval的

的等價是: //調用異步函數 waitForCurrentUser(函數(UID){ 如果(UID) 的console.log( '用戶ID是',UID) })

async waitForCurrentUser(userIdIs){ 

    try { 
     let uid = await firebase.auth().currentUser.uid; 
     if(uid) 
     { 
     clearInterval(waitForCurrentUser);   
     this.setState({uid}); 
     userIdIs(uid); 
     } 
     else { 
     console.log('Wait for it'); 
     } 

    } 

    catch(e){ 
    console.log(e) 
    } 

    // return userIdIs(uid);//returns promise 
    }; 

乾杯:)

+0

不幸的是,它並沒有太大的變化。它返回currentUser.uid爲空或拋出錯誤,因爲這個對象還沒有完成加載或第一個結果爲空,我需要第二個或類似的東西。所以,我不知道我怎麼能等待這個對象完成加載。 – Denis

+0

從內部返回如果條件工作 – Codesingh

+0

我認爲控制繞過這些語句......所以它可能工作,如果條件.. – Codesingh

0
async getUid() { 
     let user = await firebaseApp.auth().currentUser; 
     let email = await user.uid; 
} 

希望它是有用的,你

相關問題