zhanghua
2025-04-14 829f5116884f98643ffc5b2a548a600d40c0cedb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// 记录正在发送中的请求,以判断是否重复发包
export default {
  // 正在进行中的请求列表
  urlList: [],
 
  /**
     * 添加一个新的请求记录,如果已经存在进行中的请求了,就抛出异常
     * @param {string} config
     * @param {string} config.url 请求地址
     * @param {string} config.enableRepeat 允许同时发送多个相同请求
     * @return {Promise}
     */
  add(config) {
    // 允许同时发送多个相同请求
    // 比如批量上传图片的时候
    if (config.enableRepeat) return Promise.resolve()
 
    const url = config.url
 
    // 如果请求还在队列里,说明还在处理,没有回包
    if (this.urlList.includes(url)) {
      const errorMessage = `请求 ${url} 正在处理,请稍后再试!`
      const error = {
        status: {
          code: 1007, // 临时写的
          debugMessage: url,
          // eslint-disable-next-line no-use-before-define
          message: error.message
        }
      }
      return Promise.reject(error)
    }
 
    // 这里没有前缀,但是remove中有
    this.urlList.push(`${process.env.VUE_APP_API_BASE_URL}${url}`)
 
    return Promise.resolve()
  },
  /**
     * 删除一个正在进行的请求记录
     * @param {string} config
     * @param {string} config.url 请求地址
     */
  remove(config) {
    // 允许同时发送多个相同请求
    if (config.enableRepeat) return
 
    const index = this.urlList.indexOf(config.url)
    if (index >= 0) {
      this.urlList.splice(index, 1)
    }
  }
}