axios拦截器里,让结果晚5秒钟返回就错了,为什么。。请问怎么写比较好?谢谢

发布于 2022-09-12 12:55:46 字数 380 浏览 12 评论 0

axios.interceptors.response.use(data => { // 响应成功关闭loading
  setTimeout(function () {
    console.log("inter-response")
  }, 5000)
  return data
},

改成下面这样,5秒后再返回结果就发生错误

axios.interceptors.response.use(data => { // 响应成功关闭loading
  setTimeout(function () {
    console.log("inter-response")
    return data
  }, 5000)
  
},

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

落花浅忆 2022-09-19 12:55:46

代码相当于

axios.interceptors.response.use(data => { // 响应成功关闭loading
  setTimeout(function () {
    console.log("inter-response")
    return data
  }, 5000)
  return undefined
},

所以会报错

乙白 2022-09-19 12:55:46

不是很确定axios拦截器的回调函数支不支持返回promise,如果支持的话,大概这么写吧:
return new Promise(resolve => setTimeout(()=>{resolve(data)}, 5000));

或者用async,先写一个sleep函数:

let sleep = async (ms=5000) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

然后在里边用:

axios.interceptors.response.use(async (data) => { 
  await sleep()
  return data
}

不过,如果不支持promise的话...建议就别在拦截器里做这个事了,因为以js正常写法能实现的sleep函数大概长这样:

const sleep = (ms=5000)=>{
  for(let t = Date.now();Date.now() - t <= ms;);
}

axios.interceptors.response.use((data) => { 
  sleep()
  return data
}

会卡成便秘的

(上面的代码不保证都能跑得通不报错,大概表达个意思)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文