React Native中async函数返回值获取异常问题求助
问题分析与解决
你代码里存在几个核心问题,直接导致了返回值异常和日志无输出:
Fetch未处理HTTP错误状态
fetch仅在网络请求彻底失败(如断网)时才会触发reject,像404、500这类HTTP错误码不会让fetch抛出异常。哪怕服务器返回错误内容,你的代码仍会执行response.json(),如果返回的不是合法JSON,就会触发catch,但此时函数无返回值,最终返回undefined。Catch块未处理返回逻辑
如果response.json()解析失败,你的catch块仅打印日志,但未返回任何值或重新抛出错误,导致getPubsFromDatabase默认返回undefined。自执行Async函数未捕获错误
若getPubsFromDatabase内部出错,自执行函数没有try-catch兜底,错误会被静默吞掉,导致console.log(locationsData)根本不会执行。
修正后的代码
修复数据获取函数
getPubsFromDatabase = async () => { try { const response = await fetch(fetchDataUrl, { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, }); // 先校验HTTP状态是否正常 if (!response.ok) { throw new Error(`请求失败:${response.status}`); } const json = await response.json(); console.log(json); return json; } catch (error) { console.error('获取酒吧数据出错:', error); // 可选:返回默认值(如空数组)或重新抛出错误让调用方处理 // return []; throw error; } };
修复自执行调用逻辑
(async () => { try { const locationsData = await getPubsFromDatabase(); console.log(locationsData); } catch (error) { console.error('数据处理出错:', error); } })();
关键说明
- 新增
response.ok检查:确保服务器返回2xx状态码,避免解析错误响应内容。 - Catch块补充返回/抛错逻辑:避免函数静默返回
undefined,让调用方能感知错误。 - 自执行函数加try-catch:防止内部错误被静默吞掉,便于排查问题。
内容的提问来源于stack exchange,提问作者Mert Kalender Student
相关产品推荐
相关产品推荐

