如何获取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
相关产品推荐
相关产品推荐

