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

React Native多接口请求返回值异常问题排查

问题分析:Promise.all并行请求后出现数据重复/缺失的原因及解决办法

你遇到的问题是用Promise.all并行请求10个国家的数据后,结果数组长度符合预期但出现重复值、部分国家数据缺失,我来帮你排查可能的原因:


一、最可能的原因:this.country对象的URL配置重复

先优先检查你的this.country对象中,A-J这10个键对应的URL是否存在重复。比如如果this.country["A"]和this.country["I"]、this.country["J"]都指向了COUNTRY3的域名,那请求回来的数据自然会重复。

你可以在fetchData方法开头先打印所有国家的URL,确认每个值都是唯一的:

console.log('Country URLs:', Object.values(this.country));

二、冗余的Promise.all调用(不影响顺序但易增加混淆)

看你的代码,第一个Promise.all已经等待所有axios请求完成,返回的res1-res10都是已resolved的响应对象,res.data是同步可用的,完全不需要再用第二个Promise.all包裹。这一步可以简化成更清晰的写法,还能避免手动解构10个变量的潜在失误:

.then((responses) => {
  // 直接从响应数组映射出需要的价格字段
  return responses.map(res => res.data[this.priceSelector]);
})
.then(rawLoaded => {
  console.log(rawLoaded);
  if (rawLoaded.length === 10) {
    this.setState({ isloading: true, rawPrice: rawLoaded });
  }
})

三、检查this.priceSelector的稳定性

确认this.priceSelector在整个异步请求过程中没有被意外修改。比如如果这个值是动态变化的变量,或者是引用类型(比如对象),可能导致所有res.data[this.priceSelector]取到同一个值。你可以在请求前打印这个值验证:

console.log('Price selector:', this.priceSelector);

四、axios缓存或服务器端重复响应

如果多个请求的URL完全相同,浏览器或axios的缓存机制可能会返回之前的响应结果,导致数据重复。你可以给每个请求加一个唯一的时间戳参数禁用缓存:

axios.get(`${this.country["A"]}${this.props.productLink}?t=${Date.now()}`)

这样每个请求都是唯一的,能避免缓存干扰。


先从检查this.country的URL配置开始,这是最常见的导致重复数据的原因。如果URL都正确,再依次排查其他可能性。

内容的提问来源于stack exchange,提问作者helloworld

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:22:38