网络正常时Axios返回Network Error的原因排查求助
Axios 网络恢复后仍返回 ERR_NETWORK 问题解决
我用以下代码测试重试场景,测试时会反复禁用/启用WiFi,但重新开启WiFi后,Axios依然返回Network Error,错误码为ERR_NETWORK。
async function fetchRecords(path:any, offset: number, columns?: any, retryCount?: number) : Promise<any> { const response : any = await GET(path); if (response && response.status == 200){ return { data: response.data.result, }; }else { if (retryCount && retryCount > 0){ await new Promise(r => setTimeout(r, 5000)); retryCount = retryCount-1; return await fetchRecords(table, offset, columns, retryCount); }else { return response; } } }
更新内容
Axios返回的错误信息:
{ "message": "Network Error", "name": "AxiosError", "stack": "AxiosError: Network Error\n at XMLHttpRequest.handleError (http://localhost:8081/index.bundle .. )", "code": "ERR_NETWORK", "status": null }
问题根源
你的代码没处理Axios的网络异常。当触发ERR_NETWORK时,await GET(path)会直接抛出错误,根本不会走到后续的else分支,重试逻辑等于没生效。
修复后的代码
用try/catch捕获异常,把重试逻辑放在catch块里:
async function fetchRecords(path: any, offset: number, columns?: any, retryCount = 3): Promise<any> { try { const response = await GET(path); if (response?.status === 200) { return { data: response.data.result, }; } // 非200状态码也视为失败,进入重试逻辑 throw new Error(`请求状态码异常:${response?.status}`); } catch (error: any) { // 仅针对网络错误且还有重试次数时触发重试 if (retryCount > 0 && error?.code === 'ERR_NETWORK') { await new Promise(r => setTimeout(r, 5000)); return fetchRecords(path, offset, columns, retryCount - 1); } // 无重试机会或非网络错误,返回错误信息 return error; } }
额外优化说明
- 给
retryCount设默认值(比如3),避免调用时漏传导致不重试 - 精准判断错误码,只在
ERR_NETWORK时重试,避免其他错误(如接口404)重复请求 - 非200状态码主动抛错,统一在catch块处理失败逻辑
内容的提问来源于stack exchange,提问作者Abhishek Kulkarni
相关产品推荐
相关产品推荐

