Stories

Detail Return Return

請求的取消,我滴天這怎麼實現 - Stories Detail

因為再開發中遇見一個問題,前端發起一個請求之後,服務端很久沒響應,然後前端又重新發起了
其實很簡單

如果是fetch

let controller = null
controller && controller.abort() // 取消請求
controller = new AbortController()
const data = fetch('https://xxxxx',{
  signal: controller.signal // 重點
})

如果是axios

當然還有另外一個方式 CancelToken,但是我不會

import axios from 'axios';

let reqMap = new Map()

// 創建axios實例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // api的base_url
  timeout: 5000 // 請求超時時間
});
 
// 請求攔截器
service.interceptors.request.use(
  config => {
    let oldControl = reqMap.get(config.url)
    oldControl && oldControl.abort() // 取消請求
    const controller = new AbortController()
    config.signal = controller.signal
    reqMap.set(config.url,config)
    return config;
  },
  error => {
    console.log(error); // for debug
    Promise.reject(error);
  }
);
 
// 響應攔截器
service.interceptors.response.use(
  response => {
    reqMap.delete(response.config.url)
    return response;
  },
  error => {
    console.log('err' + error); // for debug
    return Promise.reject(error);
  }
);


export default service












Add a new Comments

Some HTML is okay.