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

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)
  
},
阅读 2.1k
2 个回答

代码相当于

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

所以会报错

不是很确定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
}

会卡成便秘的

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题