Skip to content

Commit d612d9f

Browse files
author
allen
committed
feat: axios 优化
1 parent 260e6a9 commit d612d9f

File tree

6 files changed

+29
-33
lines changed

6 files changed

+29
-33
lines changed

.eslintrc-auto-import-types.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
{
22
"globals": {
3-
"GetTest": true,
4-
"PostTest": true,
3+
"ApiTest": true,
54
"Types": true,
65
"App": true,
76
"User": true,

eslint.config.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ export default antfu(
2222
'prefer-arrow-callback': 'off',
2323
'no-console': 'off',
2424
'vue/custom-event-name-casing': 'off',
25+
'vue/html-self-closing': 'off',
26+
'style/operator-linebreak': 'off',
27+
'antfu/consistent-list-newline': 'off',
28+
'ts/no-unused-expressions': 'off',
2529
},
2630
},
2731
)

src/@types/api.d.ts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,9 @@
1-
declare namespace GetTest {
2-
interface params {
3-
a: number
4-
isLoading?: boolean
5-
}
6-
interface data {
1+
declare namespace ApiTest {
2+
interface GetData {
73
name: string
84
age: number
95
}
10-
}
11-
12-
declare namespace PostTest {
13-
interface params {
14-
a: number
15-
}
16-
interface data {
6+
interface PostData {
177
val: string
188
}
199
}

src/api/apiTest.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import axios from '@/utils/axios'
22

33
const apiTest = {
4-
getTest: (params: GetTest.params) => axios.get<GetTest.data>('/test', params),
5-
postTest: (params: PostTest.params) => axios.post<PostTest.data>('/test', params),
4+
getTest: (params = {}) => axios.get<ApiTest.GetData>('/test', params),
5+
postTest: (params = {}) => axios.post<ApiTest.PostData>('/test', params),
66
}
77

88
export default apiTest

src/shims.axios.d.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/utils/axios.ts

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ const axios = Axios.create({
1515
},
1616
})
1717

18-
type Method = 'get' | 'post'
19-
const methods: Method[] = ['get', 'post']
18+
const methods = ['get', 'post'] as const
19+
const MAX_RETRIES = 3 // 最大重试次数
2020

2121
methods.forEach(
22-
(method: Method) =>
22+
(method) =>
2323
(axios[method] = (url: string, params: any = {}) => {
24-
const { isLoading, ...otherParams } = params
24+
const { isLoading = false, isHideError = false, retries = 0, ...otherParams } = params
2525
const fullParams = { ...getCommonParams(), ...otherParams }
2626
const axiosOptions: AxiosRequestConfig = {
2727
method,
@@ -43,23 +43,33 @@ methods.forEach(
4343
resolve(data)
4444
break
4545
case 1000:
46-
ElMessage.error(`${data.msg}`)
46+
!isHideError && ElMessage.error(`${data.msg}`)
4747
fedLogout()
4848
resolve(null)
4949
break
5050

5151
default:
52-
ElMessage.error(`${data.msg}`)
52+
!isHideError && ElMessage.error(`${data.msg}`)
5353
resolve(null)
5454
break
5555
}
5656
})
57-
.catch((error: any) => {
57+
.catch(async (error: any) => {
58+
// 只对网络原因失败重试
59+
if (retries > 0) {
60+
resolve(
61+
await axios[method](url, {
62+
...params,
63+
retries: Math.min(retries - 1, MAX_RETRIES),
64+
}),
65+
)
66+
return
67+
}
5868
if (error.response && error.response.data) {
5969
const msg = error.response.data.message
60-
ElMessage.error(`${msg}`)
70+
!isHideError && ElMessage.error(`${msg}`)
6171
} else {
62-
ElMessage.error('服务器连接超时')
72+
!isHideError && ElMessage.error('服务器连接超时')
6373
}
6474
resolve(null)
6575
})

0 commit comments

Comments
 (0)