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

新手开发者求助:Fetch触发Possible Unhandled Promise Rejection与网络请求失败

排查"Possible Unhandled Promise Rejection"和"Network request failed"问题

核心问题分析

你的代码没处理fetch抛出的网络异常,同时存在几处逻辑疏漏,一步步来修正和排查:

1. 先给fetch加上异常捕获逻辑

fetch只有在网络层面失败时(比如DNS解析失败、服务器无响应、网络断开)才会抛出Promise拒绝,你的代码没做捕获,直接导致"Unhandled Promise Rejection"报错。必须用try/catch包裹请求逻辑:

import { User } from '../context/auth';
import { API_URL } from '../config';
import { Alert } from 'react-native';

export const login = async (username: string): Promise<User> => {
    try {
        const response = await fetch(`${API_URL}/login`, {
            method: "POST",
            headers: {
                "Content-Type": "application/json",
            },
            body: JSON.stringify({ username })
        });

        // 用response.ok判断更严谨,覆盖所有2xx成功状态码
        if (!response.ok) {
            const errorDetail = await response.text();
            console.error('登录接口返回错误:', errorDetail);
            Alert.alert('登录失败', '用户名错误或服务器异常');
            throw new Error('登录接口返回非成功状态');
        }

        // 解析响应并返回符合User类型的数据,满足函数返回值声明
        const userData = await response.json();
        console.log('登录成功:', userData);
        return userData as User;
    } catch (error) {
        console.error('网络请求失败详情:', error);
        Alert.alert('网络错误', '无法连接到服务器,请检查网络或服务器状态');
        // 抛出错误让调用方处理,或根据需求返回错误值
        throw error;
    }
}

2. 定位具体网络失败原因

捕获错误后,通过console.error打印的详细信息,结合以下点排查:

  • 检查API_URL是否正确:本地调试时,React Native模拟器/真机不能用localhost,要换成电脑的局域网IP(比如192.168.x.x),因为设备和电脑不在同一localhost环境。
  • 确认后端服务器是否在运行,/login接口是否存在且配置正确。
  • 检查设备网络状态,能否正常访问服务器地址。
  • Android需确认AndroidManifest.xml里是否添加了<uses-permission android:name="android.permission.INTERNET" />权限;iOS模拟器需确保网络权限正常。

3. 修正其他逻辑问题

  • 原函数声明返回Promise<User>,但没有任何return语句,必须解析响应JSON并返回符合User类型的数据。
  • 原代码用response.status !== 200判断成功,换成response.ok更严谨,覆盖所有2xx状态码。
  • 原Alert的注释标注"Network request failed",但该分支是HTTP状态码非200的情况,并非网络层面失败,要区分两种错误场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:49:57