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
相关产品推荐
相关产品推荐

