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

AngularFire+Firestore分页报错:Hn非函数或返回值不可迭代

Firestore分页使用startAfter时出现TypeError: Hn is not a function或返回值不可迭代

环境版本

  • @angular/fire: 7.5.0
  • @angular/core: 15.2.0
  • firebase: 9.17.1
  • Node.js: v20.11.1

错误信息

TypeError: Hn is not a function or its return value is not iterable
    at index.esm2017.js:19940:33
    at Ul (index.esm2017.js:19951:5)
    at $l._apply (index.esm2017.js:19876:19)
    at Rl (index.esm2017.js:19608:30)
    at angular-fire.js:227:48
    at angular-fire.js:160:59
    at _ZoneDelegate.invoke (zone.js:372:26)
    at Zone.run (zone.js:134:43)
    at NgZone.runOutsideAngular (core.mjs:24159:28)
    at runOutsideAngular (angular-fire.js:160:35)

分页代码

queryRef = query(
    collection(this.firestore.firestore, "Inventory_Transfers"),
    where("is_deleted", "==", false),
    where("restaurant_id", "==", restaurantId),
    where("status_by_portal_tab", "==", statusByPortalTab),
    where("requester_type", "==", requesterType),
    where("branch_ids_requested_for", "array-contains-any", batch),
    orderBy("create_on", "desc"),
    startAfter(lastVisible),
    limit(batchSize)
);

排查与解决方法

  • 校验lastVisible的正确性
    确保lastVisible是DocumentSnapshot类型,而非文档的纯数据对象(比如不要传入doc.data()的结果)。首次分页时,将lastVisible设为undefined或null,此时startAfter会自动忽略,避免传入无效值。

  • 检查Firestore索引配置
    复合查询必须配置对应索引,即使多数场景能运行,索引缺失仍可能触发底层异常。打开Firestore控制台,查看是否有未创建的索引提示,按照指引创建缺失的索引。

  • 验证array-contains-any参数
    确保batch数组非空,且数组元素类型与branch_ids_requested_for字段类型完全匹配。空数组会导致查询逻辑异常,进而引发分页错误。

  • 排查版本兼容性
    尝试升级firebase到9.x系列的稳定版本(如9.23.0),或降级至与@angular/fire 7.5.0更匹配的版本,避免版本不兼容导致的底层函数调用异常。

  • 调试lastVisible的获取逻辑
    确认从查询结果中正确提取lastVisible:

    const querySnapshot = await getDocs(queryRef);
    const lastVisible = querySnapshot.docs.length > 0 ? querySnapshot.docs[querySnapshot.docs.length - 1] : undefined;
    

    不要对lastVisible进行序列化/反序列化操作,这会丢失DocumentSnapshot的内部结构,导致startAfter无法正常识别。

内容的提问来源于stack exchange,提问作者Ahmad Faisal Alhende

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:12:17