zoukankan      html  css  js  c++  java
  • 异步请求axios的使用

    基于前面一篇文章里对Promise对象的理解,本文主要对异步请求axios进行一个理解学习。

    1.低版本浏览器不支持Promise对象的finally方法的问题解决

    安装promise.prototype.finally包,并进行引用require('promise.prototype.finally').shim()

    参考原文链接:https://blog.csdn.net/u014291497/article/details/80788377

    2.axios的全局设置

    3.axios Interceptors 拦截器

    应用场景:如,常用于在发送请求前显示一下loading...加载中遮罩层之类的,并且在返回数据之后进行关闭,通过拦截器进行统一处理更便捷

    4.注意区分axios请求方法为get和post时需要传递的参数key的差异

    5.http协议的六种请求方法及区别

    get、head、put、delete、post、options,具体区别见参考链接

    参考原文链接:https://www.cnblogs.com/wei-hj/p/7859707.html

    6.封装及调用方式

    //引入安装的包:axios
    import axios from 'axios'
    
    // 引入安装的包:promise.prototype.finally
    // 用于解决低版本浏览器不支持Promise对象的finally方法,因此需要引入对应的polyfill(如果需要用到的话)
    require('promise.prototype.finally').shim()
    
    // Global axios defaults  全局的axios的设置
    axios.defaults.timeout = 3000//请求超时的时间设置
    axios.defaults.baseURL = 'https://api.example.com'//请求的基路径
    
    // Interceptors 拦截器
    // 常用于在发送请求前显示一下loading...加载中遮罩层之类的,并且在返回数据之后进行关闭,通过拦截器进行统一处理更便捷
    // Add a request interceptor 添加一个请求时的拦截器
    axios.interceptors.request.use(
        config => {
        	// Do something before request is sent
        	// 此处写一些请求发送之前需要做的事
            return config;
        },
        error => {
        	// Do something with request error
            return Promise.reject(error);
        });
        
    // Add a response interceptor 添加一个响应后的拦截器
    axios.interceptors.response.use(
        response => {
        	// Do something with response data
            return response;
        },
        error => {
        	// Do something with response error
            return Promise.reject(error)
        });
    
    // 对axios请求进行封装,定义了一个函数http,接收两个参数request <= {url: '', method: ''}, data: 其他按需需要传的参数对象
    // 返回值是一个Promise的实例,由前面对Promise的学习已经知道,Promise对象代表一个异步操作,resolve函数可以将异步操作的结果作为参数传递出去
    // 调用Promise的实例的then方法,then方法的回掉函数的参数里,就是Promise对象传出来的值了
    // 所以,调用方法示例如下:
    //	http(url.login, params).then((value) => {
    //		//Do something with response data: value				
    //	})
    const http = (request, data) => {
        return new Promise((resolve, reject) => {
        	// 依据请求方法的不同,axios需要传递的key值不同,所以进行一下处理
        	// method为post时,key值用data
        	// method为get时,key值用params(其他几个方法不常用,但是axios文档里有涉及到,记得和post不是一伙就行了,详细参阅其他文档)
        	// 数组.indexOf(数组中的某个值)  =>  查找该值在数组中的索引,不存在为-1
            let method = request.method,
                params = ['get', 'delete', 'head'].indexOf(method) > -1 ? {
                    params: data
                } : {
                    data: data
                };
            axios({
                ...request,
                ...params
            }).then(response => {
                resolve(response.data);//将异步操作的结果作为参数传递出去, 实例的then方法的回调函数的参数用于接收
            }, err => {
                reject(err)
            })
        })
    }
    //在此处集中管理所有需要请求的url信息url和method,其他参数各自处理
    const url = {
        exportFile: {
            url: '/file/exportFile',
            method: 'post',
            headers: {
                responseType: 'blob'
            },
            timeout: 80000
        },
        searchRoutes: {
            url: '/searchRoutes',
            method: 'post'
        }
        // ...
    }
    //最后,将定义好的http和url暴露出去
    export {
        http,
        url
    }
    

    参考文档链接:https://www.npmjs.com/package/axios

    7.定义函数http部分ES6语法的理解

  • 相关阅读:
    GridView分页用法
    鼠标移动 改变Datagrid行的背景颜色
    asp.net清空某一类控件或置某一状态
    解决XP系统下"HTTP 错误 403.9 禁止访问:连接的用户过多"的问题
    Asp.net项目路径获取方法
    误删资料恢复 技巧(转载)
    linux命令
    破解win2003“终端服务器授权”激活许可证! (转载)
    apache搭建网站更改默认语言为GB2312
    jquery实现图片广告轮换效果
  • 原文地址:https://www.cnblogs.com/chaoyueqi/p/10371220.html
Copyright © 2011-2022 走看看