merge 内部参数合并时会覆盖传入参数,最终参数不生效
Closed this issue · 4 comments
llemllen commented
根据文档配置merge,发现自定义calcRequstHash不生效,在查看源码及打断点后发现在merge方法中会对options进行合并,
但根据现有的实现方式,默认的defaultCalcRequestHash一定会覆盖用户传递的calcRequstHash
import axios from 'axios'
import { useAxiosPlugin, merge } from 'axios-plugins'
useAxiosPlugin(axios).plugin(
merge({
calcRequstHash: (config) => {
// 不生效
console.log(config)
return config.url!
}
})
)
const request = axios.create({})
useAxiosPlugin(request)
.plugin(
merge({
calcRequstHash: (config) => {
// 不生效
console.log(config)
return config.url!
}
})
)
.wrap()
request.post('/123', {}).catch((e) => {
console.log(e)
})
request.post('/123', {}).catch((e) => {
console.log(e)
})
request.post('/123', {}).catch((e) => {
console.log(e)
})
halo951 commented
我瞅瞅
halo951 commented
试下. 改过了 version: 0.5.3
halo951 commented
之前大意了, 那块顺序没改过去
llemllen commented
更新0.5.3版本后自定义 calcRequstHash 可以生效,但是发现有表现不一致的地方
例如在浏览器访问404时,不使用merge时,3个请求都会进catch
import axios from 'axios'
const request = axios.create({})
async function handleLogin() {
request.post('/123', {}).catch((e) => {
// 会进来
debugger
console.log(e)
})
request.post('/123', {}).catch((e) => {
// 会进来
debugger
console.log(e)
})
request.post('/123', {}).catch((e) => {
// 会进来
debugger
console.log(e)
})
}
在设置merge后,只有后2个请求进catch,第一个请求进的then
import axios from 'axios'
import { useAxiosPlugin, merge } from 'axios-plugins'
const request = axios.create({})
useAxiosPlugin(request)
.plugin(
merge({
delay: 5000,
calcRequstHash: (config) => {
console.log(config)
return config.url!
}
})
)
.wrap()
async function handleLogin() {
request.post('/123', {}).catch((e) => {
// 第一个请求不会进来catch,会进then
debugger
console.log(e)
})
request.post('/123', {}).catch((e) => {
// 会进来
debugger
console.log(e)
})
request.post('/123', {}).catch((e) => {
// 会进来
debugger
console.log(e)
})
}