異步請求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語法的理解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM