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

React Native并行处理多个fetch请求未获预期响应,求排查

问题出在你没解析fetch的响应体!

你看到的那些_bodyBlob、headers之类的内容其实是fetch返回的Response对象,它只是包含了响应的元信息(比如状态码、响应头),并不是你要的实际接口返回的数据。fetch API的设计就是这样:第一次await拿到的是响应的外壳,你还需要调用对应的方法来解析响应体。

怎么修正?

你需要在每个fetch()后面链式调用.json()(从响应头的content-type: application/json能看出来,你的接口返回的是JSON格式),而且.json()本身也是异步的,所以要把这个Promise放进Promise.all里。

修正后的代码应该是这样:

async componentDidMount() {
  try {
    let [res1Data, res2Data] = await Promise.all([
      fetch(apiUrl1).then(res => res.json()),
      fetch(apiUrl2).then(res => res.json()),
    ]);
    console.warn(res1Data); // 现在这就是你要的实际响应数据了
    console.warn(res2Data);
  } catch(err) {
    console.warn(err);
  };
}

额外提醒

  • 如果你的接口返回的是文本而不是JSON,就把.json()换成.text()
  • 注意:Promise.all是“全有或全无”的——只要其中一个请求失败,整个Promise就会进入catch块。如果想允许部分请求成功、部分失败,可以用Promise.allSettled,然后遍历结果判断每个请求的状态
  • 别忘了检查响应的ok属性(比如res.ok),有时候接口返回4xx/5xx状态码时,fetch不会自动抛出错误,需要手动判断并抛出异常,比如:
    fetch(apiUrl1).then(res => {
      if (!res.ok) throw new Error(`请求失败:${res.status}`);
      return res.json();
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:38:13