641 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			641 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* !
 | ||
|   * uni-axios-ts
 | ||
|   * library v0.0.4
 | ||
|   * github address https://gitee.com/codeweb/uni-axios-ts.git
 | ||
|   * 
 | ||
|   * (c) 2019.12 xtshadow
 | ||
|   */
 | ||
| 
 | ||
| (function (global, factory) {
 | ||
|     typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
 | ||
|     typeof define === 'function' && define.amd ? define(factory) :
 | ||
|     (global = global || self, global.axios = factory());
 | ||
| }(this, (function () { 'use strict';
 | ||
| 
 | ||
|     /**
 | ||
|      * 请求Method类型
 | ||
|      */
 | ||
|     var Method;
 | ||
| 
 | ||
|     (function (Method) {
 | ||
|       Method["GET"] = "GET";
 | ||
|       Method["POST"] = "POST";
 | ||
|       Method["PUT"] = "PUT";
 | ||
|       Method["HEAD"] = "HEAD";
 | ||
|       Method["DELETE"] = "DELETE";
 | ||
|       Method["TRACE"] = "TRACE";
 | ||
|       Method["CONNECT"] = "CONNECT";
 | ||
|       Method["OPTIONS"] = "OPTIONS";
 | ||
|     })(Method || (Method = {}));
 | ||
|     /**
 | ||
|      * 响应的数据类型
 | ||
|      */
 | ||
| 
 | ||
| 
 | ||
|     var HttpResponseType;
 | ||
| 
 | ||
|     (function (HttpResponseType) {
 | ||
|       HttpResponseType["TEXT"] = "text";
 | ||
|       HttpResponseType["ARRAYBUFFER"] = "arraybuffer";
 | ||
|     })(HttpResponseType || (HttpResponseType = {}));
 | ||
| 
 | ||
|     var AxiosError =
 | ||
|     /*@__PURE__*/
 | ||
|     function (Error) {
 | ||
|       function AxiosError(message, statusCode, config, request, response) {
 | ||
|         Error.call(this, message);
 | ||
|         this.config = config;
 | ||
|         this.statusCode = statusCode;
 | ||
|         this.request = request;
 | ||
|         this.response = response;
 | ||
|         Object.setPrototypeOf(this, AxiosError.prototype);
 | ||
|       }
 | ||
| 
 | ||
|       if (Error) AxiosError.__proto__ = Error;
 | ||
|       AxiosError.prototype = Object.create(Error && Error.prototype);
 | ||
|       AxiosError.prototype.constructor = AxiosError;
 | ||
|       return AxiosError;
 | ||
|     }(Error);
 | ||
|     function createError(message, statusCode, config, request, response) {
 | ||
|       var error = new AxiosError(message, statusCode, config, request, response);
 | ||
|       return error;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 执行请求,调用微信Request方法
 | ||
|      * @param config
 | ||
|      */
 | ||
| 
 | ||
|     function wxRequest(config) {
 | ||
|       var url = config.url;
 | ||
|       var method = config.method;
 | ||
|       if (method === void 0) method = Method.GET;
 | ||
|       var data = config.data;
 | ||
|       if (data === void 0) data = {};
 | ||
|       var header = config.header;
 | ||
|       if (header === void 0) header = {};
 | ||
|       var responseType = config.responseType;
 | ||
|       if (responseType === void 0) responseType = HttpResponseType.TEXT;
 | ||
|       var cancelToken = config.cancelToken;
 | ||
|       var validateStatus = config.validateStatus;
 | ||
|       return new Promise(function (resolve, reject) {
 | ||
|         // @ts-ignore
 | ||
|         var requestTask = uni.request({
 | ||
|           url: url,
 | ||
|           header: header,
 | ||
|           method: method,
 | ||
|           data: data,
 | ||
|           responseType: responseType,
 | ||
|           success: function success(res) {
 | ||
|             var response = {
 | ||
|               data: res.data,
 | ||
|               statusCode: res.statusCode,
 | ||
|               header: res.header
 | ||
|             };
 | ||
| 
 | ||
|             if (!validateStatus || validateStatus(res.statusCode)) {
 | ||
|               resolve(response);
 | ||
|             } else {
 | ||
|               reject(createError("Request failed with status code " + response.statusCode, response.statusCode, config, requestTask, response));
 | ||
|             }
 | ||
|           },
 | ||
|           fail: function fail(error) {
 | ||
|             reject(createError("Net Error", 1001, config, requestTask));
 | ||
|           }
 | ||
|         }); // 请求取消
 | ||
| 
 | ||
|         if (cancelToken) {
 | ||
|           cancelToken.promise.then(function (reason) {
 | ||
|             requestTask.abort();
 | ||
|             reject(reason);
 | ||
|           });
 | ||
|         }
 | ||
|       });
 | ||
|     }
 | ||
| 
 | ||
|     function _typeof(obj) {
 | ||
|       if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
 | ||
|         _typeof = function (obj) {
 | ||
|           return typeof obj;
 | ||
|         };
 | ||
|       } else {
 | ||
|         _typeof = function (obj) {
 | ||
|           return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
 | ||
|         };
 | ||
|       }
 | ||
| 
 | ||
|       return _typeof(obj);
 | ||
|     }
 | ||
| 
 | ||
|     var toString = Object.prototype.toString;
 | ||
|     /**
 | ||
|      * Determine if a value is an Array
 | ||
|      *
 | ||
|      * @param {Object} val The value to test
 | ||
|      * @returns {boolean} True if value is an Array, otherwise false
 | ||
|      */
 | ||
| 
 | ||
|     function isArray(val) {
 | ||
|       return toString.call(val) === '[object Array]';
 | ||
|     }
 | ||
|     /**
 | ||
|      * 确定值是否为对象
 | ||
|      *
 | ||
|      * @param {Object} val 要测试的值
 | ||
|      * @returns {boolean} 如果值是对象,则为true;否则为false
 | ||
|      */
 | ||
| 
 | ||
|     function isObject(val) {
 | ||
|       return val !== null && _typeof(val) === 'object';
 | ||
|     }
 | ||
|     /**
 | ||
|     * 迭代Array或为每个项目调用函数的对象。
 | ||
|     *
 | ||
|     * 如果`obj`为数组回调将被调用传递。
 | ||
|     * 每项的值、索引和完整数组。
 | ||
|     *
 | ||
|     * 如果`obj`是一个对象回调将被调用传递。
 | ||
|     * 每个属性的值、键和Complete对象。
 | ||
|     *
 | ||
|     * @param{object|Array} obj要迭代的对象。
 | ||
|     * @param{function} fn要为每个项调用的回调。
 | ||
|     */
 | ||
| 
 | ||
|     function forEach(obj, fn) {
 | ||
|       if (obj !== null && typeof obj !== 'undefined') {
 | ||
|         // Force an array if not already something iterable
 | ||
|         // 数组也属于对象
 | ||
|         if (_typeof(obj) !== 'object') {
 | ||
|           /*eslint no-param-reassign:0*/
 | ||
|           obj = [obj];
 | ||
|         }
 | ||
| 
 | ||
|         if (isArray(obj)) {
 | ||
|           // Iterate over array values
 | ||
|           for (var i = 0, l = obj.length; i < l; i++) {
 | ||
|             fn.call(null, obj[i], i, obj);
 | ||
|           }
 | ||
|         } else {
 | ||
|           // Iterate over object keys
 | ||
|           Object.getOwnPropertyNames(obj).forEach(function (key) {
 | ||
|             if (Object.prototype.hasOwnProperty.call(obj, key) && key !== 'constructor') {
 | ||
|               fn.call(null, obj[key], key, obj);
 | ||
|             }
 | ||
|           }); // for (let key in obj) {
 | ||
|           //     console.log(`forin key:${key}`);
 | ||
|           //     if (Object.prototype.hasOwnProperty.call(obj, key)) {
 | ||
|           //         console.log(`callback:${key}`)
 | ||
|           //         fn.call(null, obj[key], key, obj);
 | ||
|           //     }
 | ||
|           // }
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|     /**
 | ||
|      * 通过可变地向`对象A`添加`对象B`的属性来扩展`对象A`
 | ||
|      *
 | ||
|      * @param {Object} a 要扩展的对象
 | ||
|      * @param {Object} b 要从中复制属性的对象
 | ||
|      * @param {Object} thisArg 要将函数绑定到的对象
 | ||
|      * @return {Object} 对象a的结果
 | ||
|      */
 | ||
| 
 | ||
|     function extend(a, b, thisArg) {
 | ||
|       forEach(b, function assignValue(val, key) {
 | ||
|         if (thisArg && typeof val === 'function') {
 | ||
|           // a[key] = bind(val, thisArg);
 | ||
|           a[key] = val.bind(thisArg);
 | ||
|         } else {
 | ||
|           a[key] = val;
 | ||
|         }
 | ||
|       });
 | ||
|       return a;
 | ||
|     }
 | ||
|     /**
 | ||
|      * 函数等于merge,差值为无引用
 | ||
|      * 保留为原始对象
 | ||
|      * @see merge
 | ||
|      * @param {Object} obj1 Object to merge
 | ||
|      * @returns {Object} Result of all merge properties
 | ||
|      */
 | ||
| 
 | ||
|     function deepMerge() {
 | ||
|       var objs = [],
 | ||
|           len = arguments.length;
 | ||
| 
 | ||
|       while (len--) {
 | ||
|         objs[len] = arguments[len];
 | ||
|       }
 | ||
| 
 | ||
|       var result = Object.create(null);
 | ||
| 
 | ||
|       function assignValue(val, key) {
 | ||
|         if (isObject(result[key] && isObject(val))) {
 | ||
|           result[key] = deepMerge(result[key], val);
 | ||
|         } else if (isObject(val)) {
 | ||
|           result[key] = deepMerge({}, val);
 | ||
|         } else {
 | ||
|           result[key] = val;
 | ||
|         }
 | ||
|       }
 | ||
| 
 | ||
|       for (var i = 0; i < objs.length; i++) {
 | ||
|         var obj = objs[i];
 | ||
| 
 | ||
|         for (var key in obj) {
 | ||
|           assignValue(obj[key], key);
 | ||
|         }
 | ||
|       }
 | ||
| 
 | ||
|       return result;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 标准格式化请求头
 | ||
|      * @param headers 请求头对象
 | ||
|      * @param normalizeName 标准名称
 | ||
|      */
 | ||
| 
 | ||
|     function normalizeHeaderName(header, normalizeName) {
 | ||
|       Object.keys(header).forEach(function (name) {
 | ||
|         if (name !== normalizeName && name.toUpperCase() === normalizeName.toUpperCase()) {
 | ||
|           header[normalizeName] = header[name];
 | ||
|           delete header[name];
 | ||
|         }
 | ||
|       });
 | ||
|     }
 | ||
|     /**
 | ||
|      * 格式化加工 Header请求头
 | ||
|      * @param headers
 | ||
|      */
 | ||
| 
 | ||
| 
 | ||
|     function processHeaders(header) {
 | ||
|       normalizeHeaderName(header, 'Content-Type');
 | ||
|       normalizeHeaderName(header, 'appId');
 | ||
|       normalizeHeaderName(header, 'sessionId');
 | ||
|       return header;
 | ||
|     }
 | ||
|     /**
 | ||
|      * 请求头扁平化
 | ||
|      *
 | ||
|      * @param headers
 | ||
|      * @param method
 | ||
|      */
 | ||
| 
 | ||
|     function flattenHeaders(headers, method) {
 | ||
|       if (!headers) {
 | ||
|         return headers;
 | ||
|       }
 | ||
| 
 | ||
|       headers = deepMerge(headers.common || {}, headers[method.toLocaleLowerCase()] || {}, headers);
 | ||
|       var methodsToDelete = ['delete', 'get', 'head', 'options', 'post', 'put', 'patch', 'common'];
 | ||
|       methodsToDelete.forEach(function (method) {
 | ||
|         delete headers[method];
 | ||
|       });
 | ||
|       return headers;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 组合URL
 | ||
|      * @param baseURL
 | ||
|      * @param relativeUrl
 | ||
|      */
 | ||
|     function combineURL(baseURL, relativeURL) {
 | ||
|       return relativeURL ? baseURL.replace(/\/+$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL;
 | ||
|     }
 | ||
|     /**
 | ||
|      * 判断`URL`是否是绝对路径
 | ||
|      * @param url
 | ||
|      * @return {boolean}
 | ||
|      */
 | ||
| 
 | ||
|     function isAbsoluteURL(url) {
 | ||
|       // 如果URL以“<scheme>://”或“//”(协议相对URL)开头,则该URL被视为绝对值。
 | ||
|       // RFC 3986将方案名称定义为以字母开头的字符序列,
 | ||
|       // 后跟字母,数字,加号,句点或连字符的任意组合。
 | ||
|       return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 处理请求头
 | ||
|      * @param config
 | ||
|      */
 | ||
| 
 | ||
|     function transformHeaders(config) {
 | ||
|       var header = config.header;
 | ||
|       if (header === void 0) header = {};
 | ||
|       var method = config.method;
 | ||
|       if (method === void 0) method = Method.GET;
 | ||
|       header = processHeaders(header);
 | ||
|       return flattenHeaders(header, method);
 | ||
|     }
 | ||
|     /**
 | ||
|      * 处理请求地址 URL
 | ||
|      * @param config
 | ||
|      */
 | ||
| 
 | ||
|     function transformUrl(config) {
 | ||
|       var url = config.url;
 | ||
|       if (url === void 0) url = '';
 | ||
|       var baseURL = config.baseURL;
 | ||
|       if (baseURL === void 0) baseURL = '';
 | ||
| 
 | ||
|       if (baseURL && !isAbsoluteURL(url)) {
 | ||
|         url = combineURL(baseURL, url);
 | ||
|       }
 | ||
| 
 | ||
|       return url;
 | ||
|     }
 | ||
|     /**
 | ||
|      * 抛出异常
 | ||
|      *
 | ||
|      * 如果当前`cancelToken`已经取消请求,则抛出异常
 | ||
|      * @param config
 | ||
|      */
 | ||
| 
 | ||
|     function throwIfCancellationRequested(config) {
 | ||
|       if (config.cancelToken) {
 | ||
|         config.cancelToken.throwIfRequested();
 | ||
|       }
 | ||
|     }
 | ||
|     /**
 | ||
|      * 预处理配置文件
 | ||
|      * @param config 配置文件
 | ||
|      */
 | ||
| 
 | ||
|     function processConfig(config) {
 | ||
|       config.header = transformHeaders(config);
 | ||
|       config.url = transformUrl(config);
 | ||
|     }
 | ||
|     /**
 | ||
|      * 执行请求
 | ||
|      * @param config 配置文件
 | ||
|      */
 | ||
| 
 | ||
|     function dispatchRequest(config) {
 | ||
|       throwIfCancellationRequested(config);
 | ||
|       processConfig(config);
 | ||
|       return wxRequest(config);
 | ||
|     }
 | ||
| 
 | ||
|     var InterceptorManager = function InterceptorManager() {
 | ||
|       this.handlers = [];
 | ||
|     };
 | ||
| 
 | ||
|     InterceptorManager.prototype.use = function use(resolved, rejected) {
 | ||
|       this.handlers.push({
 | ||
|         resolved: resolved,
 | ||
|         rejected: rejected
 | ||
|       });
 | ||
|       return this.handlers.length - 1;
 | ||
|     };
 | ||
| 
 | ||
|     InterceptorManager.prototype.eject = function eject(id) {
 | ||
|       if (this.handlers[id]) {
 | ||
|         this.handlers[id] = null;
 | ||
|       }
 | ||
|     };
 | ||
| 
 | ||
|     InterceptorManager.prototype.forEach = function forEach(fn) {
 | ||
|       this.handlers.forEach(function (interceptor) {
 | ||
|         if (interceptor !== null) {
 | ||
|           fn(interceptor);
 | ||
|         }
 | ||
|       });
 | ||
|     };
 | ||
| 
 | ||
|     function mergeConfig(defaultConfig, userConfig) {
 | ||
|       var config = Object.create(null); // 创建空对象,作为最终的合并结果
 | ||
|       // 1.常规属性,如果用户配置了就用用户配置的,如果用户没配置,则用默认配置的;
 | ||
| 
 | ||
|       var defaultToUserConfig = ["baseURL", "transformRequest", "transformResponse", "paramsSerializer", "timeout", "withCredentials", "adapter", "responseType", "xsrfCookieName", "xsrfHeaderName", "onUploadProgress", "onDownloadProgress", "maxContentLength", "validateStatus", "maxRedirects", "httpAgent", "httpsAgent", "cancelToken", "socketPath"];
 | ||
|       defaultToUserConfig.forEach(function (prop) {
 | ||
|         userConfig = userConfig || {}; // 如果用户配置里有
 | ||
| 
 | ||
|         if (typeof userConfig[prop] !== "undefined") {
 | ||
|           // 则用用户配置里的
 | ||
|           config[prop] = userConfig[prop]; // 如果用户配置里没有,默认配置里有
 | ||
|         } else if (typeof defaultConfig[prop] !== "undefined") {
 | ||
|           // 则用默认配置里的
 | ||
|           config[prop] = defaultConfig[prop];
 | ||
|         }
 | ||
|       }); // 2.只接受用户配置,不管默认配置对象里面有没有,我们只取用户配置的;
 | ||
| 
 | ||
|       var valueFromUserConfig = ["url", "method", "params", "data"];
 | ||
|       valueFromUserConfig.forEach(function (prop) {
 | ||
|         userConfig = userConfig || {};
 | ||
| 
 | ||
|         if (typeof userConfig[prop] !== 'undefined') {
 | ||
|           config[prop] = userConfig[prop];
 | ||
|         }
 | ||
|       }); // 3.复杂对象深度合并
 | ||
| 
 | ||
|       var mergeDeepProperties = ["header", "auth", "proxy"];
 | ||
|       mergeDeepProperties.forEach(function (prop) {
 | ||
|         userConfig = userConfig || {};
 | ||
| 
 | ||
|         if (isObject(userConfig[prop])) {
 | ||
|           config[prop] = deepMerge(defaultConfig[prop], userConfig[prop]);
 | ||
|         } else if (typeof userConfig[prop] !== 'undefined') {
 | ||
|           config[prop] = userConfig[prop];
 | ||
|         } else if (isObject(defaultConfig[prop])) {
 | ||
|           config[prop] = deepMerge(defaultConfig[prop]);
 | ||
|         } else if (typeof defaultConfig[prop] !== 'undefined') {
 | ||
|           config[prop] = defaultConfig[prop];
 | ||
|         }
 | ||
|       });
 | ||
|       return config;
 | ||
|     }
 | ||
| 
 | ||
|     var Axios = function Axios(defaultConfig) {
 | ||
|       this.defaults = defaultConfig;
 | ||
|       this.interceptors = {
 | ||
|         request: new InterceptorManager(),
 | ||
|         response: new InterceptorManager()
 | ||
|       };
 | ||
|     };
 | ||
| 
 | ||
|     Axios.prototype.request = function request(config) {
 | ||
|       // 合并参数
 | ||
|       config = mergeConfig(this.defaults, config); // 拦截器
 | ||
| 
 | ||
|       var promise = Promise.resolve(config);
 | ||
|       var chain = [{
 | ||
|         resolved: dispatchRequest,
 | ||
|         rejected: undefined
 | ||
|       }]; // let chain:AxiosInterceptor<any>[] = [
 | ||
|       // {
 | ||
|       //     resolved: dispatchRequest,
 | ||
|       //     rejected: undefined
 | ||
|       // }
 | ||
|       // ];
 | ||
| 
 | ||
|       this.interceptors.request.forEach(function (interceptor) {
 | ||
|         chain.unshift(interceptor);
 | ||
|       });
 | ||
|       this.interceptors.response.forEach(function (interceptor) {
 | ||
|         chain.push(interceptor);
 | ||
|       });
 | ||
| 
 | ||
|       while (chain.length > 0) {
 | ||
|         var ref = chain.shift();
 | ||
|         var resolved = ref.resolved;
 | ||
|         var rejected = ref.rejected;
 | ||
|         promise = promise.then(resolved, rejected);
 | ||
|       }
 | ||
| 
 | ||
|       return promise; // return dispatchRequest(config);
 | ||
|     };
 | ||
| 
 | ||
|     Axios.prototype.get = function get(url, config) {
 | ||
|       return this._requestMethodWithoutData(Method.GET, url, config);
 | ||
|     };
 | ||
| 
 | ||
|     Axios.prototype.post = function post(url, data, config) {
 | ||
|       return this._requestMethodWithData(Method.POST, url, data, config);
 | ||
|     };
 | ||
| 
 | ||
|     Axios.prototype.put = function put(url, data, config) {
 | ||
|       return this._requestMethodWithData(Method.PUT, url, data, config);
 | ||
|     };
 | ||
| 
 | ||
|     Axios.prototype["delete"] = function delete$1(url, config) {
 | ||
|       return this._requestMethodWithoutData(Method.DELETE, url, config);
 | ||
|     };
 | ||
| 
 | ||
|     Axios.prototype.connect = function connect(url, config) {
 | ||
|       return this._requestMethodWithoutData(Method.CONNECT, url, config);
 | ||
|     };
 | ||
| 
 | ||
|     Axios.prototype.head = function head(url, config) {
 | ||
|       return this._requestMethodWithoutData(Method.HEAD, url, config);
 | ||
|     };
 | ||
| 
 | ||
|     Axios.prototype.options = function options(url, config) {
 | ||
|       return this._requestMethodWithoutData(Method.OPTIONS, url, config);
 | ||
|     };
 | ||
| 
 | ||
|     Axios.prototype.trace = function trace(url, config) {
 | ||
|       return this._requestMethodWithoutData(Method.TRACE, url, config);
 | ||
|     };
 | ||
| 
 | ||
|     Axios.prototype._requestMethodWithData = function _requestMethodWithData(method, url, data, config) {
 | ||
|       return this.request(Object.assign(config || {}, {
 | ||
|         method: method,
 | ||
|         url: url,
 | ||
|         data: data
 | ||
|       }));
 | ||
|     };
 | ||
| 
 | ||
|     Axios.prototype._requestMethodWithoutData = function _requestMethodWithoutData(method, url, config) {
 | ||
|       return this.request(Object.assign(config || {}, {
 | ||
|         method: method,
 | ||
|         url: url
 | ||
|       }));
 | ||
|     };
 | ||
|     /**
 | ||
|      * 根据传入的请求配置对象返回一个请求的`URL`
 | ||
|      * @param config 请求配置
 | ||
|      * @returns {string} 请求`URL`
 | ||
|      */
 | ||
| 
 | ||
| 
 | ||
|     Axios.prototype.getUri = function getUri(config) {
 | ||
|       config = mergeConfig(this.defaults, config);
 | ||
|       return transformUrl(config);
 | ||
|     };
 | ||
| 
 | ||
|     /**
 | ||
|      * 默认配置
 | ||
|      */
 | ||
| 
 | ||
|     var defaults = {
 | ||
|       baseURL: '',
 | ||
|       header: {},
 | ||
|       method: Method.GET,
 | ||
|       responseType: HttpResponseType.TEXT,
 | ||
|       validateStatus: function validateStatus(status) {
 | ||
|         return status >= 200 && status < 300;
 | ||
|       }
 | ||
|     };
 | ||
| 
 | ||
|     var Cancel = function Cancel(message) {
 | ||
|       if (message === void 0) message = '';
 | ||
|       this.message = message;
 | ||
|     };
 | ||
| 
 | ||
|     var CancelToken = function CancelToken(executor) {
 | ||
|       var this$1 = this;
 | ||
|       var resolvePromise;
 | ||
|       this.promise = new Promise(function (resolve) {
 | ||
|         resolvePromise = resolve;
 | ||
|       }); // executor 括号内为 一个回调函数作为参数,该函数接收一个string类型的取消原因作为参数
 | ||
|       // 调用该回调函数时,会修改 Promise状态为 resolve
 | ||
| 
 | ||
|       executor(function (message) {
 | ||
|         if (this$1.reason) {
 | ||
|           return;
 | ||
|         }
 | ||
| 
 | ||
|         this$1.reason = new Cancel(message);
 | ||
|         resolvePromise(this$1.reason); // 修改 Promise状态为 resolve
 | ||
|       });
 | ||
|     };
 | ||
| 
 | ||
|     CancelToken.source = function source() {
 | ||
|       var cancel;
 | ||
|       var token = new CancelToken(function (fn) {
 | ||
|         cancel = fn;
 | ||
|       });
 | ||
|       return {
 | ||
|         cancel: cancel,
 | ||
|         token: token
 | ||
|       };
 | ||
|     };
 | ||
| 
 | ||
|     CancelToken.prototype.throwIfRequested = function throwIfRequested() {
 | ||
|       if (this.reason) {
 | ||
|         throw this.reason;
 | ||
|       }
 | ||
|     };
 | ||
| 
 | ||
|     function isCancel(val) {
 | ||
|       return val instanceof Cancel;
 | ||
|     }
 | ||
| 
 | ||
|     function getAxios(config) {
 | ||
|       var context = new Axios(config); // Axios 实例,用于给 axios继承自身属性
 | ||
| 
 | ||
|       var axios = Axios.prototype.request.bind(context); // 复制原型方法,并绑定函数`this`  Copy axios.prototype to instance
 | ||
| 
 | ||
|       extend(axios, Axios.prototype, context); // 复制实例属性 Copy context to instance
 | ||
| 
 | ||
|       extend(axios, context);
 | ||
|       return axios;
 | ||
|     }
 | ||
| 
 | ||
|     var axios = getAxios(defaults);
 | ||
| 
 | ||
|     axios.create = function create(config) {
 | ||
|       return getAxios(mergeConfig(defaults, config));
 | ||
|     };
 | ||
| 
 | ||
|     axios.CancelToken = CancelToken;
 | ||
|     axios.Cancel = Cancel;
 | ||
|     axios.isCancel = isCancel;
 | ||
| 
 | ||
|     axios.all = function (promises) {
 | ||
|       return Promise.all(promises);
 | ||
|     };
 | ||
| 
 | ||
|     axios.spread = function (callback) {
 | ||
|       return function wrap(arr) {
 | ||
|         return callback.apply(null, arr);
 | ||
|       };
 | ||
|     };
 | ||
| 
 | ||
|     return axios;
 | ||
| 
 | ||
| })));
 |