You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:12:27