基于axios,promise封装http请求

537 阅读1分钟
import AjaxPlugin from 'axios';

const request = (
    url: string,
    {
        method,
        data = {},
        isMock = false, //是否是mock接口
        response = 'json', //文件传输需要替换格式
    }: {
        method: string;
        data?: any;
        isMock: boolean;
        response?: any;
  
 
    }
) => {
    return new Promise((resolve, reject) => {
        if (url.indexOf('?') < 0) {
            url += '?_dt=' + Math.random();
        }

        if (
            data &&
            typeof data === 'object' &&
            (method === 'get' || method === 'delete')
       ) {
            for (const k in data) {
                if (data.hasOwnProperty(k)) {
                    if (k === 'key' && (data[k] || '').indexOf("'") >= 0) {
                        data[k] = data[k].replace(/\/'/g, '');
                    }
                    url += '&' + k + '=' + data[k];
                }
            }
        }
        let ajaxResult: any;
        if (method === 'get') {
            ajaxResult = AjaxPlugin.get(url, { responseType: response });
        } else if (method === 'delete') {
            ajaxResult = AjaxPlugin.delete(url);
        } else if (method === 'post') {
            ajaxResult = AjaxPlugin.post(url, data, { responseType: response });
        } else if (method === 'put') {
            ajaxResult = AjaxPlugin.put(url, data);
        }

        ajaxResult
            .then(
                (r: any) => {
                    resolve(r.data);
                },
                (r: any) => {
                    reject(r.data);
                }
            )
    });
};

export default request;

export async function queryData(data: any) {
    return await request('xxxxurl', {
        method: 'post',
        data
    });
}