H5W3
当前位置:H5W3 > 问答 > 正文

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)
},

回答

代码相当于

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
}

会卡成便秘的

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

未经允许不得转载:H5W3 » axios拦截器里,让结果晚5秒钟返回就错了,为什么。。请问怎么写比较好?谢谢

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址