/** * 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;