import axios from 'axios'
const CancelToken = axios.CancelToken
const taskContainer = {
list: [],
addTask: function(task) {
this.list.push(task)
},
delTask: function(url) {
this.list = this.list.filter(t => t.url !== url)
},
cancelTask: function(task) {
this.list.forEach(t => {
if (t.url === task.url) {
t.cancel()
}
})
this.delTask(task.url)
},
getTask: function(url) {
return this.list.find(t => t.url === url)
},
clearTask: function() {
this.list = []
}
}
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API
})
service.interceptors.request.use(config => {
const task = taskContainer.getTask(config.url)
if (task) {
taskContainer.cancelTask(task)
}
config['cancelToken'] = new CancelToken((cancel) => {
taskContainer.addTask({
url: config.url,
cancel
})
})
return config
}, error => {
return Promise.reject(error)
})
service.interceptors.response.use(response => {
const config = response.config
taskContainer.delTask(config.url)
const res = response.data
const code = res.code
if (code !== 200) {
return Promise.reject(res)
}
return res
}, (error) => {
console.error('Request Error:', error)
return Promise.reject(error)
})
export default service