如何让onAuthStateChanged执行完成后再返回用户uid?
解决Firebase onAuthStateChanged未等待完成就返回值的问题
问题原因
onAuthStateChanged 是Firebase的状态监听函数,它返回的是用于取消监听的函数,而非Promise对象。你用await对它无效,函数会直接跳过监听回调的执行,返回初始的uId值。
修正方案
将getUser逻辑包装成Promise,手动控制异步流程:
修改后的GetLoginedUser.js
import { app, db } from "./FiiireBaseConfig"; import { getAuth, onAuthStateChanged } from "firebase/auth"; const auth = getAuth(); export function getUser() { return new Promise((resolve, reject) => { console.log("Get User Started"); onAuthStateChanged(auth, (user) => { if (user) { resolve(user.uid); // 获取到用户时返回uid } else { alert("No User Found"); reject(new Error("No user logged in")); // 无用户时拒绝Promise } }); }); }
修改后的调用代码
// 建议用import保持ES模块风格一致 import { getUser } from "./GetLoginedUser"; let user; async function updateUserImage() { try { user = await getUser(); console.log("user:" + user); } catch (err) { console.error(err); // 处理无用户的异常情况 } } updateUserImage();
补充说明
- 包装成Promise后,
await会等待回调执行完成,确保拿到正确的uid后再继续后续逻辑。 - 添加错误捕获,避免无用户时出现未处理的异常。
内容的提问来源于stack exchange,提问作者Dixit Ram
相关产品推荐
相关产品推荐

