封装Axios全局请求函数后,错误无法被捕获的问题求助
问题原因与解决方案
你的问题出在两个核心逻辑错误上:
1. requests.js中post函数的错误处理逻辑错误
你在内部的catch回调里return error,这会把Axios请求失败时返回的rejected Promise强制转换成resolved Promise,resolve的值就是error对象。上层调用时,这个错误会被当成成功结果进入then回调,而非触发catch。
2. post函数未返回请求的Promise链
你声明了async函数,但内部没有返回Axios请求的Promise链,导致这个async函数默认返回一个resolve为undefined的Promise(结合你的描述,实际代码可能已补上return,但错误处理的问题依然是核心)。
修正后的代码
方案一:直接返回Axios请求Promise(推荐,最简洁)
// requests.js import axios from 'axios'; export const post = (url, data, config) => { // 不内部捕获错误,让上层调用者自行处理成功/失败逻辑 return axios.post(url, data, config); }
方案二:用async/await并正确抛出错误
// requests.js import axios from 'axios'; export const post = async (url, data, config) => { try { const result = await axios.post(url, data, config); return result; } catch (error) { // 抛出错误,让上层的catch捕获 throw error; } }
后续调用逻辑无需改动
修正post函数后,你原本在index.js里的调用代码即可正常工作:400/500等错误会进入catch回调,成功响应会进入then回调。
内容的提问来源于stack exchange,提问作者Jack The Baker
相关产品推荐
相关产品推荐

