GraphQL 游标分页 endCursor 不变导致死循环
现象#
全量同步商品的脚本跑了一夜没结束,日志里每页打印的都是同一批 ID,pageInfo.endCursor 每次相同,数据量却一直不增长。
原因#
- 循环体没有把
endCursor回写到 after 变量,每次请求都从第一页重新开始 - 取的是
edges[0].cursor而不是pageInfo.endCursor,指针永远停在页首 after传了空字符串而不是 null,服务端按无游标处理,又回到第一页- 只用
hasNextPage做退出条件,游标为空时既不报错也不停止
处理步骤#
- 每轮只从响应里取
pageInfo.endCursor,并断言它与上一轮不同 - 循环条件写成
hasNextPage and endCursor,任一为空立即退出 - 首页显式不传
after,不要传空串或上一轮残留的变量 - 记录已处理的 ID 集合,出现重复就中断并打印当前游标
- 单页
first控制在 250 以内,超出会直接返回参数错误
验收标准#
连续翻页时游标单调变化,最后一页 hasNextPage 为 false,导出条数与后台计数一致且无重复 ID。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。