fetch终止请求?

通过AbortController停止请求,后端/a用setTimeout模拟慢请求,
点击button2阻止请求,能够catch到错误aborted,但是实际上浏览器
仍然会返回接口/a数据(后端定时器到时),这是不是不算停止请求,还是模拟超时不对
`

const button1=document.querySelector('#button1')
const button2=document.querySelector('#button2')
const controller = new AbortController();
let signal = controller.signal;
button1.addEventListener('click',async ()=>{
 fetch('/a',{signal}).then(async v=>{
 console.log(await v.json())
}).catch(e=>{
  console.log(e.message)
})
})
//stop
button2.addEventListener('click',async ()=>{
  controller.abort();
})`


阅读 3.7k
1 个回答

AbortController 兼容性应该不太好,在实际业务中不采取。

中止请求的方法有:

  1. Promise.race + fetch(其实这是中止不掉请求的,只是前端认为该请求已超时,不再 get 它的结果)
  2. axios.cancelToken
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题