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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:13:28