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

调用JavaScript异步函数报错:then不是函数及await关键字异常

问题解决

错误1:getUsersList(db).then is not a function

这个报错的核心是调用getUsersList(db)时,它没返回预期的Promise对象,结合你的代码来看,主要有两个原因:

  • 代码存在语法缺失:你提供的片段里,App函数的if语句块、then的回调函数都没闭合(缺少}),语法错误会让JS引擎无法正确识别getUsersList这个async函数的结构,导致返回值异常。
  • auth.currentUser是同步获取的初始值,页面加载时它大概率为null,这会导致getUsersList根本没被执行,你可能误把其他值当成了它的返回结果。

修复步骤:

  1. 先补全代码的闭合括号,保证语法正确:
async function getUsersList(db) {
  const userCol = collection(db, 'Users');
  const userSnapshot = await getDocs(userCol);
  const tempUserList = userSnapshot.docs.map(doc => doc.data());
  return tempUserList;
}

function App() {
  const app = initializeApp(firebaseConfig);
  const db = getFirestore(app);
  const auth = getAuth(app);

  var currentUser = auth.currentUser;

  if(currentUser != null){
    getUsersList(db).then((value) => {
      console.log(value);
    }); // 补全then的闭合括号
  } // 补全if的闭合括号
} // 补全App函数的闭合括号
  1. 改用Firebase的onAuthStateChanged监听用户登录状态,因为auth.currentUser不会自动更新,监听才能准确获取登录后的用户:
function App() {
  const app = initializeApp(firebaseConfig);
  const db = getFirestore(app);
  const auth = getAuth(app);

  // 监听用户登录状态变化
  onAuthStateChanged(auth, (user) => {
    if (user) {
      // 用户已登录,调用异步函数
      getUsersList(db).then((value) => {
        console.log(value);
      });
    }
  });
}

错误2:Unexpected reserved word 'await'

await只能在async函数内部使用,你直接在普通的App函数里用await就会触发这个错误。

修复方法:
把调用getUsersList的逻辑放在async函数里,比如结合上面的登录监听:

function App() {
  const app = initializeApp(firebaseConfig);
  const db = getFirestore(app);
  const auth = getAuth(app);

  onAuthStateChanged(auth, async (user) => {
    if (user) {
      // 这里是async函数,可以用await
      const userList = await getUsersList(db);
      console.log(userList);
    }
  });
}

如果是在React组件中,更规范的做法是把异步逻辑放在useEffect钩子中:

import { useEffect } from 'react';

function App() {
  const app = initializeApp(firebaseConfig);
  const db = getFirestore(app);
  const auth = getAuth(app);

  useEffect(() => {
    const fetchUsers = async () => {
      const user = auth.currentUser;
      if (user) {
        const userList = await getUsersList(db);
        console.log(userList);
      }
    };

    // 监听用户状态
    const unsubscribe = onAuthStateChanged(auth, fetchUsers);

    // 组件卸载时取消监听
    return unsubscribe;
  }, [auth, db]);

  return <div>你的组件内容</div>;
}

内容的提问来源于stack exchange,提问作者user567

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:55:13