axios 应用中进一步封装
/* 能发送异步ajax请求的函数模块 封装axios库 函数的返回值是promise对象 1. 优化1: 统一处理请求异常? 在外层包一个自己创建的promise对象 在请求出错时, 不reject(error), 而是显示错误提示 2. 优化2: 异步得到不是reponse, 而是response.data 在请求成功resolve时: resolve(response.data) */ import axios from 'axios' export default function ajax (url, data = {}, type = 'GET') { return new Promise((resolve, reject) => { let promise // 1. 执行异步ajax请求 if (type === 'GET') { // 发GET请求 promise = axios.get(url, { // 配置对象 params: data // 指定请求参数 }) } else { // 发POST请求 promise = axios.post(url, data) } // 2. 如果成功了, 调用resolve(value) promise.then(response => { resolve(response.data) // 3. 如果失败了, 不调用reject(reason), 而是提示异常信息 }).catch(error => { // reject(error) alert('请求出错了: ' + error.message) }) }) }
/* ajax 请求函数模块 */ import axios from 'axios' /** * 向外部暴漏一个函数 ajax * @param {*} url 请求路径,默认为空 * @param {*} data 请求参数,默认为空对象 * @param {*} type 请求方法,默认为GET */ export default function ajax (url = '', data = {}, type = 'GET') { // 返回值 Promise对象 (异步返回的数据是response.data,而不是response) return new Promise(function (resolve, reject) { // (利用axios)异步执行ajax请求 let promise // 这个内部的promise用来保存axios的返回值(promise对象) if (type === 'GET') { // 准备 url query 参数数据 let dataStr = '' // 数据拼接字符串,将data连接到url Object.keys(data).forEach(key => { dataStr += key + '=' + data[key] + '&' }) if (dataStr !== '') { dataStr = dataStr.substring(0, dataStr.lastIndexOf('&')) url = url + '?' + dataStr } // 发送 get 请求 promise = axios.get(url) } else { // 发送 post 请求 promise = axios.post(url, data) } promise.then(response => { // 成功回调resolve() resolve(response.data) }) .catch(error => { // 失败回调reject() reject(error) }) }) }