使用AngularFire Offline查询Firebase聊天数据报错:queryFn is not a function
解决AngularFire 5.x中
queryFn is not a function错误 嘿,这个问题我太熟悉了!你遇到的报错是因为AngularFire 5.x版本彻底改变了列表查询的API写法,你用的还是旧版本(4.x及更早)的配置方式,自然会触发这个错误。
问题根源
在AngularFire 4.x及以前,我们可以通过{query: ...}这种静态配置对象来定义数据库查询,但到了5.x版本,官方换成了基于RxJS的新API——要求你传入一个查询函数,而不是配置对象。你的代码里传的是{query: query},这在5.x里会被当作“期望传入函数,结果得到了对象”,所以抛出queryFn is not a function。
修正后的代码
把你的查询逻辑改成查询函数的形式就可以了,直接看修改后的代码:
getChat(chatId: string, batch: number, lastTimestamp?: number) { // 定义查询函数:接收Firebase数据库引用,返回构建好的查询 const buildQuery = (ref: firebase.database.Reference) => { let query = ref.orderByChild('timestamp').limitToLast(batch); if (lastTimestamp) { query = query.startAt(lastTimestamp); } return query; }; // 把查询函数传入list方法 return this.afo.list(`Chats/${chatId}`, buildQuery); }
关键说明
- 查询函数的作用:这个函数会接收Firebase的数据库引用(
ref),你可以通过链式调用orderByChild、limitToLast、startAt等方法来构建你需要的查询,最后返回这个查询对象即可。 - AngularFire Offline兼容性:你用的
afo(AngularFireOfflineDatabase)的API和AngularFire 5.x保持一致,所以这个写法完全适用。 - 参数类型:确保
batch是数字类型,lastTimestamp的类型要和你数据库里timestamp字段的类型匹配(通常是数字时间戳)。
这样修改后,你的getChat函数就能正常从Firebase数据库(包括离线缓存)获取聊天记录啦!
内容的提问来源于stack exchange,提问作者Lucas Mähn
相关产品推荐
相关产品推荐

