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

Firebase开发报错:query is not a function问题求助

解决方案:Uncaught TypeError: query is not a function

问题根源

你在getTopPlayers函数中,用var query重新定义了变量,直接覆盖了从Firebase SDK导入的query函数。当执行var query = query(...)时,由于变量提升特性,右侧的query已经被当前作用域的变量声明劫持,导致调用的不是Firebase的query函数,而是未初始化的局部变量,最终触发类型错误。

修复步骤

  1. 修改变量名避免冲突:将函数内的query变量改为其他名称(比如playersQuery),确保不会覆盖导入的query函数。
  2. 改用现代变量声明:替换var为const或let,避免变量提升带来的意外问题。

修复后的核心代码片段

function getTopPlayers() {
  const db = getDatabase(app);
  // 变量名改为playersQuery,避免覆盖导入的query函数
  const playersQuery = query(ref(db, "players"), orderByChild("starCount"));

  return get(playersQuery).then(function (snapshot) {
    const players = [];
    snapshot.forEach(function (childSnapshot) {
      const player = childSnapshot.val();
      player.key = childSnapshot.key;
      players.push(player);
    });
    return players.reverse().slice(0, 10); // 返回前10名玩家
  });
}

额外优化建议

如果想直接获取降序排列的前10名,可结合limitToLast(10)减少数据传输量,无需后续手动截取:

// 直接获取starCount最高的10条数据,遍历后反转即为降序
const playersQuery = query(ref(db, "players"), orderByChild("starCount"), limitToLast(10));

内容的提问来源于stack exchange,提问作者Samuel Kundrát

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:37:46