最近在和后端小伙伴调试接口的时候,有一个接口是响应status一直是canceled,导致接收不到数据或者说没有响应值返回,后端小伙伴看日志说是请求的数据已经返回了。正常的响应status应该是200,如果响应有误,响应的status应该是500、504、403等,如下图中接口响应的Status:
那响应status是canceled,这是什么情况呢?
答:原来是请求超时造成的
1、首先我响应对响应进行了拦截。
axios.interceptors.response.use(
(response)=>{
},
(err)=>{
console.log('错误响应------')
console.log(err)
// 发生网络错误后会走到这里
return Promise.resolve(err)
}
)
2、然后看打印的结果如下:
错误响应------
timeout
3、经过对打印结果的分析,说明请求超时了。
看了一下之前设置的请求超时时长是10000,也就是10s,
10s之后,后端没有响应,前端会断开请求,也就是取消了请求,然后会把取消的状态返回,所以响应status是canceled。因为之前的请求已经到了后端,后端也响应了数据,但是前端已经断开了请求,所以也就接收不到数据了。
所以我把请求超时时长增加到300000,也就是5分钟
axios.config.timeout = 300000;
最后,问题完美解决。
总结:一定到找对出问题的点,然后采取措施打印出错误,这样就可以针对性的解决问题。加油!