Axios不进入then/catch无输出问题排查(Node v8.11.1环境)
根据你的描述,请求能正常发送且后端成功接收,但then/catch完全不触发,再结合你使用的Node.js v8.11.1版本,最可能的原因是axios版本与旧Node环境不兼容,下面是具体分析和解决方案:
1. 核心原因:axios版本过高不支持Node v8.11.1
axios从v0.21.0开始,官方明确要求Node.js版本≥10,而你的v8.11.1不在支持范围内。高版本axios内部使用了Node v8不支持的API或Promise处理逻辑,会导致返回的Promise永远处于pending状态——既不resolve也不reject,自然不会触发then或catch回调。
解决办法:降级axios到兼容版本
安装支持Node v8的axios版本,比如v0.20.0:
npm install axios@0.20.0
安装完成后重新测试你的代码,大概率能正常触发then/catch。
2. 其他可能的排查方向
如果降级后问题仍存在,可以检查以下几点:
检查axios拦截器是否阻塞了Promise
如果你添加了请求/响应拦截器,一定要确保在拦截器中调用return传递结果,否则Promise会一直pending:// 错误示例:拦截器未返回结果 axios.interceptors.response.use(function(response) { // 处理逻辑...但忘记return response }); // 正确写法 axios.interceptors.response.use(function(response) { // 处理逻辑 return response; // 必须返回,否则Promise无法resolve });确认await的使用场景是否正确
Node.js v8的全局作用域不支持直接使用await(仅REPL环境允许),如果你的代码是在普通脚本中直接写await axios.post(...),实际上await不会生效,你打印的只是未resolve的Promise对象。正确的写法是将代码包裹在async函数中:async function sendRequest() { try { const response = await axios.post(url, {test: "0"}); console.log(response); } catch (err) { console.error(err); } } sendRequest();测试响应解析是否存在问题
虽然后端能正常响应,但如果返回的Content-Type不是application/json,axios默认的JSON解析可能出现异常(不过这种情况通常会触发catch)。你可以强制设置responseType为text来测试:axios.post(url, {test: "0"}, {responseType: 'text'}) .then(res => console.log(res)) .catch(err => console.error(err));
总结
优先尝试降级axios版本,这是适配Node v8.11.1最直接的解决方案。如果问题依旧,再逐步排查拦截器、await使用方式等细节。
内容的提问来源于stack exchange,提问作者leonheess

