最近在和后端小伙伴调试接口的时候,有一个接口是响应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;

最后,问题完美解决。

总结:一定到找对出问题的点,然后采取措施打印出错误,这样就可以针对性的解决问题。加油!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐