使用es6类扩展axios

Tho*_*ggi 7 javascript axios es6-class

我对创建 API 包装器并使用 es6 类从 axios 进行扩展很感兴趣。这怎么可能?axios 有一个方法 .create() 可以让你生成一个新的 axios 对象

class Api extends Axios {
  constructor(...args){
    super(..args)
    this.defaults.baseURL = 'https://api.com'
  }
  cancelOrder (id) {
    return this.put(`/cancel/order/${id}`)
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以访问这个let instance = axios.create()

有什么想法吗?

尝试1

import axios from 'axios'
const Axios = axios.create()

class Api extends Axios {
  constructor (...args) {
    super(...args)
    this.defaults.baseURL = 'https://api.com'
  }
  cancelOrder (id) {
    return this.put(`/cancel/order/${id}`)
  }
}

let api = new Api()

api.cancelOrder('hi')
  .then(console.log)
  .catch(console.log)
Run Code Online (Sandbox Code Playgroud)

尝试2

import axios from 'axios'

class Axios {
  constructor () {
    return axios.create()
  }
}

class Api extends Axios {
  constructor () {
    super()
    this.defaults.baseURL = 'https://api.com'
  }
  cancelOrder (id) {
    return this.put(`/cancel/order/${id}`)
  }
}

let api = new Api()

console.log(api.__proto__)

api.cancelOrder('hi')
  .then(console.log)
  .catch(console.log)
Run Code Online (Sandbox Code Playgroud)

Tho*_*ggi 6

axios目前不导出Axios其内部使用的类。

.create()方法仅实例化一个新实例。

// Factory for creating new instances
axios.create = function create(defaultConfig) {
  return new Axios(defaultConfig);
};
Run Code Online (Sandbox Code Playgroud)

我创建了一个导出该类的 PR Axios

https://github.com/reggi/axios/commit/7548f2f79d20031cd89ea7c2c83f6b3a9c2b1da4

还有一个 GitHub 问题:

https://github.com/mzabriskie/axios/issues/320


Tuv*_*via 3

如果您查看源代码,它们似乎并未公开 的“类” ,而仅公开了一个实例。Axios

我不相信实例对象可以在 es6 中扩展。


您的第二次尝试似乎是最可行的,但如果您想模拟每一种axios方法,您可能会产生大量开销。