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

React Native中Fetch API处理登录接口响应序列化问题求助

问题诊断与解决方案

你遇到的核心问题是第一个.then()回调里没有返回response.text()或response.json()的结果——这两个方法都会返回一个Promise,只有把这个Promise返回出去,下一个.then()才能接收到对应的响应内容,否则第二个.then()拿到的responseJson会是undefined,导致后续逻辑完全失效。

修正后的完整代码

fetch(restUrl, { 
  method: "POST", 
  headers: { 
    'Accept': '*/*', 
    'Content-Type': 'application/json', 
  }, 
  body: JSON.stringify(objReq) 
})
.then(response => { 
  // 关键:必须return对应的Promise,让下一个then能拿到处理后的内容
  if (response.status >= 200 && response.status < 300) { 
    return response.text(); 
  } else { 
    return response.json(); 
  } 
})
.then(responseData => { 
  // 现在responseData会是成功时的text,或者失败时的JSON对象
  if (!responseData) { 
    alert(i18n.t('unable')); 
    return;
  }
  
  // 这里可以根据类型做后续处理:比如如果成功的text是JSON格式,可转成对象
  // if (typeof responseData === 'string') {
  //   responseData = JSON.parse(responseData);
  // }
  
  // 你的业务逻辑写在这里
  console.log('处理后的响应内容:', responseData);
})
.catch(error => { 
  alert(`${error}-from error`); 
});

关键修改点说明

  • 返回Promise:response.text()和response.json()都是异步操作,返回Promise对象,必须通过return把这个Promise传递到下一个.then()链中,否则后续无法获取到实际的响应数据。
  • 统一参数命名:把responseJson改成responseData更准确,因为成功时它是文本,失败时才是JSON对象。
  • 简化空值判断:用!responseData替代冗余的!= null && != undefined,逻辑更简洁。

另外,额外建议:如果成功响应的文本其实是JSON格式的字符串,可以在成功分支里直接return response.text().then(text => JSON.parse(text)),这样后续拿到的就是统一的对象格式,处理起来更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:01:11