使用 async/await 获取 firebase.auth().currentUser
Get firebase.auth().currentUser with async/await
我成功地使用 onAuthStateChange 观察器检查了用户的身份验证状态,并将用户重定向到仪表板页面(react-native 项目)。但是,在仪表板上我已经想显示一些用户特定的数据,例如已注册 programs/statistics。为此,我需要初始化和填充 currentUser 对象,这需要一些时间(我需要从那里获取 uid 以从数据库中获取一些数据)。因此,我正在寻找某种方法来等待此过程成功完成。我正在尝试在 componentDidMount 中使用 async/await 语法,但返回的结果为空。 (相同的语法在其他屏幕上成功运行,但在第一个屏幕上失败)
async componentDidMount() {
try {
let uid = await firebase.auth().currentUser.uid;
console.log(uid);
} catch(error) {
console.log(error);
}
}
等待使用 async/await 语法加载 currentUser 对象的最佳方法是什么? 我相信原因可能是 firebase returns 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);
setInterval 的等效项是:
//calling the asynchronous function
waitForCurrentUser(function(uid){
if(uid)
console.log('the user id is',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
};
干杯 :)
async getUid() {
let user = await firebaseApp.auth().currentUser;
let email = await user.uid;
}
希望对你有用
export async function getAuthUserID(): Promise<string | undefined> {
return await new Promise( (resolve, reject) => {
firebase.auth().onIdTokenChanged(async (user) => {
if (!user) {
resolve(undefined);
} else {
resolve(user.uid);
}
})
}).then((uid: string | undefined)=>uid).catch(function(e) {
throw (e);
});
}
我成功地使用 onAuthStateChange 观察器检查了用户的身份验证状态,并将用户重定向到仪表板页面(react-native 项目)。但是,在仪表板上我已经想显示一些用户特定的数据,例如已注册 programs/statistics。为此,我需要初始化和填充 currentUser 对象,这需要一些时间(我需要从那里获取 uid 以从数据库中获取一些数据)。因此,我正在寻找某种方法来等待此过程成功完成。我正在尝试在 componentDidMount 中使用 async/await 语法,但返回的结果为空。 (相同的语法在其他屏幕上成功运行,但在第一个屏幕上失败)
async componentDidMount() {
try {
let uid = await firebase.auth().currentUser.uid;
console.log(uid);
} catch(error) {
console.log(error);
}
}
等待使用 async/await 语法加载 currentUser 对象的最佳方法是什么? 我相信原因可能是 firebase returns 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);
setInterval 的等效项是:
//calling the asynchronous function
waitForCurrentUser(function(uid){
if(uid)
console.log('the user id is',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
};
干杯 :)
async getUid() {
let user = await firebaseApp.auth().currentUser;
let email = await user.uid;
}
希望对你有用
export async function getAuthUserID(): Promise<string | undefined> {
return await new Promise( (resolve, reject) => {
firebase.auth().onIdTokenChanged(async (user) => {
if (!user) {
resolve(undefined);
} else {
resolve(user.uid);
}
})
}).then((uid: string | undefined)=>uid).catch(function(e) {
throw (e);
});
}