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

