使用Expo+React Native+Django REST Framework时出现未处理Promise拒绝错误
解决React Native + Expo + Django REST Framework的未处理Promise拒绝错误
核心问题分析
你遇到的"Possible Undandled Promise Rejection"错误,本质是异步请求未做错误处理,再加上本地服务地址访问的兼容性问题,两者共同导致了报错。
修复步骤
1. 给异步请求添加错误捕获
async/await语法下,任何网络异常、服务错误都会抛出未捕获的Promise异常,必须用try/catch包裹处理:
const fetchData = async() => { try { const response = await fetch('替换成正确的地址/api/prices/') // 先校验响应状态,非2xx状态码主动抛出错误 if (!response.ok) { throw new Error(`请求失败:${response.status}`) } const data = await response.json() setData(data) } catch (error) { console.error('获取数据失败:', error) // 可选:用Alert组件给用户展示错误提示 // Alert.alert('错误', '无法获取数据,请检查网络或服务状态') } }
2. 修正本地服务访问地址
不同设备访问电脑本地Django服务的地址不一样,不能直接用127.0.0.1:
- Android Studio模拟器:使用
10.0.2.2(模拟器内置的本地电脑映射地址),比如http://10.0.2.2:8000/api/prices/ - 真机设备:确保手机和电脑在同一WiFi下,使用电脑的局域网IP地址(比如
192.168.1.105),格式为http://你的电脑局域网IP:8000/api/prices/
3. 配置Django允许跨域和外部访问
- 安装并配置
django-cors-headers,解决跨域问题:# settings.py INSTALLED_APPS = [ # ...其他应用 'corsheaders', ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', # ...其他中间件 ] # 开发环境允许所有跨域请求,生产环境需限制来源 CORS_ALLOW_ALL_ORIGINS = True - 设置允许外部主机访问:
# settings.py # 开发环境允许所有主机,生产环境替换为具体域名/IP ALLOWED_HOSTS = ['*']
4. 检查Expo网络权限
确认app.json中已配置网络权限(Expo默认包含,但可以手动确认):
{ "expo": { "android": { "permissions": ["INTERNET"] } } }
内容的提问来源于stack exchange,提问作者Francisco Reinaudo
相关产品推荐
相关产品推荐

