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

如何获取response.data.length的值并用于汽车数据API的循环请求逻辑

问题根源
  • 异步逻辑错误:axios.request() 返回的是 Promise 实例,你没有通过 await 等待异步请求完成,直接赋值给 lengthVar 的是 Promise 对象而非接口返回的数组长度,因此 while 条件判断完全失效。
  • 分页参数失效:当前 params.page 写死为字符串 '$output_page',没有使用变量插值也没有随循环递增,每次请求都会拉取同一页数据,即便拿到正确长度也永远不会跳出循环。
  • 错误处理逻辑漏洞:请求报错时你返回了 error 对象,用该对象做模50运算会得到不符合预期的结果,可能导致循环异常终止或无限执行。
修复方案

你可以直接采用以下调整后的代码,逻辑完全匹配你的需求:

// 初始化分页参数、数据存储变量
let currentPage = 0
let lastResponseLength = 0
const allCars = [] // 可选:用于存储所有拉取到的车辆数据

do {
  currentPage++ // 页码自增
  const options = {
    method: 'GET',
    url: 'https://car-data.p.rapidapi.com/cars',
    params: {
      limit: '50',
      page: currentPage, // 替换为动态递增的页码
      year: input_year,
      make: input_brand,
      type: input_type
    },
    headers: {
      'x-rapidapi-host': 'car-data.p.rapidapi.com',
      'x-rapidapi-key': '*KEY*'
    }
  }
  await sleep(2000)
  try {
    const response = await axios.request(options)
    console.log(response.data)
    lastResponseLength = response.data.length
    allCars.push(...response.data) // 可选:把当前页数据存入总数组
  } catch (error) {
    console.error(error)
    lastResponseLength = 0 // 请求失败直接终止循环
  }
} while(lastResponseLength === 50) // 当次返回满50条说明还有下一页,继续循环
补充说明
  • 用 try/catch 包裹异步请求,错误场景下直接把长度设为0终止循环,避免逻辑异常
  • 直接判断返回长度是否等于50即可,不需要做模运算,逻辑更直观
  • 新增的 allCars 数组可以收集所有拉取到的车辆数据,后续直接用该数组渲染页面即可

内容的提问来源于stack exchange,提问作者Dominik Czekański

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:51:00