0

在axios拦截器中,获取config.params并重新赋值,但是发现变量好像进行了提升。
代码如下:

service.interceptors.request.use(
  config => {
    if (store.getters.token) {
      config.headers['Admin-Token'] = getToken()
    }
    buildSign(config)
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)
function buildSign (config) {
  const map = new Map()
  if (config.params !== undefined) {
    var signParams = Object.assign(config.params)
    Object.keys(signParams).forEach(function (key) {
      map.set(key, signParams[key])
    })
  }
  console.log(map)

  const mapAsc = new Map([...map.entries()].sort())
  let s = ''
  mapAsc.forEach(function (value, key) {
    s += key + '=' + value + '_'
  })
  s = encodeURIComponent(
    removeChar(config.url) + '_' + s + process.env.VUE_APP_TIMA_SECRETKEY
  )
  s = md5(s)
  config.params['sign'] = s
}

此时发现,如果我想重新赋值config.params['sign'],发现在我进行遍历

 var signParams = Object.assign(config.params)
    Object.keys(signParams).forEach(function (key) {
      map.set(key, signParams[key])
    })

时map已经存在sign的key了,这是发生了什么问题呢?变量提升吗。小白求问,谢谢大家
此时的签名就是错误的。如果我注释掉最后的

  config.params['sign'] = s

签名就是正确的。

张天 0
2019-07-22 提问
0 个回答

撰写答案

推广链接