halo951/axios-plugins

merge 内部参数合并时会覆盖传入参数,最终参数不生效

Closed this issue · 4 comments

源码位置

根据文档配置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)
})

我瞅瞅

试下. 改过了 version: 0.5.3

之前大意了, 那块顺序没改过去

更新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)
  })
}