API单请求限200条记录,需JS计数器实现批量获取数据
解决Zoho CRM API分页获取重复数据的问题
你的问题根源是每次请求未传递分页参数,导致API始终返回第一页的200条数据,最终数组里全是重复的分页结果。Zoho CRM的Search Records API支持分页参数,通过page(页码)和per_page(每页条数,最大值200)即可获取不同页的内容,以下是具体解决方案:
核心修改点
- 给每个API请求添加
page参数,循环时从1开始递增,直到获取到所需总条数 - 处理异步请求的顺序问题,避免并发请求导致的逻辑混乱
- 正确展开返回的记录数组,避免存入嵌套对象
方案一:固定页数的串行请求(适用于已知每日记录数范围)
如果每日记录在800-1200条,对应4-6页,可直接循环对应页码:
const totalPages = 6; // 1200/200=6,根据实际需求调整 const dealRecords = []; async function fetchAllRecords() { for (let page = 1; page <= totalPages; page++) { try { // 传入分页参数 const response = await SOMECOMPANY.API.searchRecord({ Entity: "Greeting", Type: "criteria", Query: "(Text:equals:Hay)", page: page, per_page: 200 }); // 将当前页记录展开存入数组(根据API实际返回结构调整response.data) dealRecords.push(...response.data); } catch (err) { console.error(`第${page}页获取失败:`, err); } } console.log("所有获取到的记录:", dealRecords); } fetchAllRecords();
方案二:动态计算总页数(更灵活,适用于不确定总记录数的场景)
先请求第一页获取总记录数,再计算需要请求的总页数,避免请求不存在的页码:
const dealRecords = []; const perPage = 200; async function fetchAllRecords() { // 先获取第一页,拿到总记录数 const firstPageRes = await SOMECOMPANY.API.searchRecord({ Entity: "Greeting", Type: "criteria", Query: "(Text:equals:Hay)", page: 1, per_page: perPage }); dealRecords.push(...firstPageRes.data); const totalRecords = firstPageRes.info.total_count; // 假设API返回的info中包含总条数 const totalPages = Math.ceil(totalRecords / perPage); // 从第2页开始循环请求 for (let page = 2; page <= totalPages; page++) { try { const pageRes = await SOMECOMPANY.API.searchRecord({ Entity: "Greeting", Type: "criteria", Query: "(Text:equals:Hay)", page: page, per_page: perPage }); dealRecords.push(...pageRes.data); } catch (err) { console.error(`第${page}页获取失败:`, err); } } console.log("所有获取到的记录:", dealRecords); } fetchAllRecords();
注意事项
- API返回结构校验:不同版本的Zoho API返回格式可能有差异,可先单独请求一次,打印
response查看实际结构,调整response.data和response.info.total_count的取值路径 - 频率限制:Zoho API有请求频率限制,串行请求(async/await)比并发请求更不容易触发限制,如果需要并发,建议控制同时请求的数量
- 错误处理:添加try/catch避免单页请求失败导致整个流程中断,可根据需求选择中断或继续后续请求
内容的提问来源于stack exchange,提问作者Nathan Zoho
相关产品推荐
相关产品推荐

