vue axios請求頻繁時取消上一次請求

1、前言

在項目中常常有一些場景會連續發送多個請求,而異步會致使最後獲得的結果不是咱們想要的,而且對性能也有很是大的影響。例如一個搜索框,每輸入一個字符都要發送一次請求,但輸入過快的時候其實前面的請求並無必要真的發送出去,這時候就須要在發送新請求的時候直接取消上一次請求。vue axios攔截器介紹html

2、代碼

<script>
import axios from 'axios'
import qs from 'qs'

export default {
    methods: {
        request(keyword) {
            var CancelToken = axios.CancelToken
            var source = CancelToken.source()
              
            // 取消上一次請求
            this.cancelRequest();
            
            axios.post(url, qs.stringify({kw:keyword}), {
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                    'Accept': 'application/json'
                },
                cancelToken: new axios.CancelToken(function executor(c) {
                    that.source = c;
                })
            }).then((res) => {
                // 在這裏處理獲得的數據
                ...
            }).catch((err) => {
                if (axios.isCancel(err)) {
                    console.log('Rquest canceled', err.message); //請求若是被取消,這裏是返回取消的message
                } else {
                    //handle error
                    console.log(err);
                }
            })
        },
        cancelRequest(){
            if(typeof this.source ==='function'){
                this.source('終止請求')
            }
        },
    }
}
</script>

3、結語

這樣就能夠成功取消上一次請求啦!真的很是好用~vue

原文地址:http://www.javashuo.com/article/p-fyftzrak-go.htmlios

相關文章
相關標籤/搜索