import axios from 'axios' import { wxAdatper } from './adapters/index' import addCompatibleMethods from './compatibleMethods' import { addInstanceExtendMethod, proxyAxiosMethods } from './helpers' import { generateMethod } from './methods' import { AjaxInstance, AjaxOption, AxiosMethods } from './types' import { canceller } from './canceller' declare const wx: any; function isWxapp(): boolean { return typeof wx !== 'undefined' && typeof wx.request === 'function'; } export default function initAjax(options: AjaxOption & CusOpts): AjaxInstance { const ajax = {} as AjaxInstance; ajax.$options = options; // 检测wx如果没有自定义的适配器,则使用默认适配器 const adapter = ajax.$options.adapter || (isWxapp() ? wxAdatper : undefined); ajax.$options.adapter = adapter ajax.$engine = axios.create(); const requestMethods: AxiosMethods[] = ['POST', 'PUT', 'PATCH', 'DELETE', 'GET', 'HEAD'] requestMethods.forEach((name) => { ajax[name.toLocaleLowerCase()] = generateMethod(ajax, name) }) // 挂载取消请求的方法 ajax.CancelToken = axios.CancelToken ajax.canceller = canceller // 把ajax实例上的'request', 'interceptors'方法代理到axios上去 proxyAxiosMethods(ajax, ajax.$engine); addCompatibleMethods(ajax) // 添加extend方法,用于扩展ajax实例 addInstanceExtendMethod(ajax); return ajax; }