12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /**
- * Copyright © 2020 suxinghua. All rights Reserved.
- */
-
- const axios = (function () {
- class Axios {
- constructor() {
- this.defaults = {
- baseUrl: "",
- };
- this.interceptors = {
- request: new InterceptorManager(),
- response: new InterceptorManager(),
- };
- }
-
- wxRequest(c) {
- return new Promise((resolve, reject) => {
- c = this.interceptors.request.func(c);
- c.url = c.url.startsWith("http") ? c.url : c.baseUrl + c.url;
- c.success = (res) => {
- resolve(this.interceptors.response.func(res));
- };
- c.fail = (res) => {
- reject(this.interceptors.response.func(res));
- };
- wx.request(c);
- });
- }
- }
-
- Array.prototype.forEach.call(
- ["options", "get", "head", "post", "put", "delete", "trace", "connect"],
- function (m) {
- Axios.prototype[m] = function (url, data, config) {
- return this.wxRequest(
- merge(
- this.defaults,
- {
- url: url,
- method: m,
- data: data,
- },
- config || {}
- )
- );
- };
- }
- );
-
- class InterceptorManager {
- constructor() {
- this.func = function (data) {
- return data;
- };
- }
- use(fn) {
- this.func = fn;
- }
- }
-
- function merge(axiosDefaultConfig, data, config) {
- let cloneAxios = deepClone(axiosDefaultConfig);
- let cloneData = deepClone(data);
- let cloneConfig = deepClone(config);
- return Object.assign(cloneAxios, cloneData, cloneConfig);
- }
-
- // 深拷贝
- function deepClone(obj) {
- let _obj = JSON.stringify(obj),
- objClone = JSON.parse(_obj);
- return objClone;
- }
-
- return new Axios();
- })();
-
- export default axios;
|