javascript - 使用 es6 类扩展 Axios

标签 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}`)
  }
}

我知道我可以访问这个 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)

尝试 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)

最佳答案

axios 当前不导出它在内部使用的 Axios 对象。

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

// Factory for creating new instances
axios.create = function create(defaultConfig) {
  return new Axios(defaultConfig);
};

我创建了一个导出 Axios 类的 pr。

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

还有一个 github 问题:

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

关于javascript - 使用 es6 类扩展 Axios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37217716/

相关文章:

javascript - 未调用鼠标移动函数

javascript - jstree - 重命名功能问题(节点上的文本输入,单击重命名后,不接受更改)

javascript - 在 D3.js 中检测按键

javascript - 如何使用 Axios 发布二进制文件?

reactjs - 如何使用 React Native 和 Axios 发送表单数据?

javascript - 具有现代 ES6 javascript 类的方法的局部临时变量

javascript - 如何导出多个类方法

javascript - 使用路由/部分时如何在 AngularJs 上加载 js 和 css 文件?

javascript - 在子悬停时更改父背景

javascript - React 无法通过 API 调用读取未定义的属性状态