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函数,而是未初始化的局部变量,最终触发类型错误。
修复步骤
- 修改变量名避免冲突:将函数内的
query变量改为其他名称(比如playersQuery),确保不会覆盖导入的query函数。 - 改用现代变量声明:替换
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
相关产品推荐
相关产品推荐

