axios 루트 이동 취소 요청
3896 단어 Vue
(1)state:
const state = {
axiosCancelTokens: [] // axios token
}
(2)mutation-types:
export const AXIOS_PUSH_TOKEN = 'AXIOS_PUSH_TOKEN' // axios
export const AXIOS_CLEAR_TOKEN = 'AXIOS_CLEAR_TOKEN' // axios
(3)mutations:
import * as types from './mutation-types'
import { constAxios } from '@/utils/constant'
export default {
[types.AXIOS_PUSH_TOKEN]: (state, src) => {
state.axiosCancelTokens.push(src.cancelToken)
},
[types.AXIOS_CLEAR_TOKEN]: ({axiosCancelTokens}) => {
axiosCancelTokens.forEach(item => {
item(constAxios.requestCancelDesc)
})
axiosCancelTokens = []
}
}
2.router:
import store from '@/store'
import * as types from '@/store/mutation-types'
//
router.beforeEach((to, from, next) => {
store.commit(types.AXIOS_CLEAR_TOKEN)//
next()
})
3.axios:
/**
* @file request.js axios
*/
import axios from 'axios'
import { MessageBox, Indicator, Toast } from 'mint-ui'
import { getStore, loginOut } from '../utils/index'
import store from '@/store'
import * as types from '@/store/mutation-types'
import { constAxios } from '@/utils/constant'
// axios
const service = axios.create({
baseURL: process.env.NODE_ENV === 'development' ? '' : process.env.BASE_API,
timeout: constAxios.timeout //
})
axios.defaults.headers.post['Content-Type'] = 'application/json-patch+json'
axios.defaults.retry = 3
axios.defaults.retryDelay = 1000
//
service.interceptors.request.use((config) => {
//
config.cancelToken = new axios.CancelToken((cancel) => {
store.commit(types.AXIOS_PUSH_TOKEN, {
cancelToken: cancel
})
})
// ...
return config
}, (error) => {
return Promise.reject(error)
})
service.interceptors.response.use(response => {
//
// 1.
Indicator.close()
// 2.
var result = response.data
if (response.status !== 200) {
MessageBox(' ', ' , :' + response.status)
return Promise.reject(response.status)
} else if (!result.success) {
var msg = result.msg
MessageBox(' ', msg)
return Promise.reject(msg)
} else {
return result
}
}, (error) => {
//
//
Indicator.close()
//
if (error.message !== constAxios.requestCancelDesc) {
//
var originalRequest = error.config
if (error.code === 'ECONNABORTED' && error.message.includes('timeout') && !originalRequest._retry) {
var config = error.config
MessageBox.alert(' , ').then(action => {
originalRequest._retry = true
return service.request(config)
})
} else if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
Toast({
message: ` !`,
position: 'bottom'
})
} else if (error.response) {
if (error.response.status === 401) {
// MessageBox.alert(' , !').then(action => {
// // loginOut()
// })
} else {
MessageBox(' ', ` :${error.message}(${error.response.status})`)
}
} else {
MessageBox(' ', ' ,' + error.message)
}
}
return Promise.reject(error)
})
export default service
4.constant: 상수
/**
*
*/
/**
* axios
*/
export const AXIOS_REQUEST_CANCEL = ' '
5. 참조:
(1)axios npm:https://www.npmjs.com/package/axios(2) 라우팅 점프 취소 요청:https://blog.csdn.net/echo_Ae/article/details/89174777
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vue Render 함수로 DOM 노드 코드 인스턴스 만들기render에서createElement 함수를 사용하여 DOM 노드를 만드는 것은 직관적이지 않지만 일부 독립 구성 요소의 디자인에서 특수한 수요를 충족시킬 수 있습니다.간단한 렌더링 예는 다음과 같습니다. 또한 v...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.