vue axios請求頻繁時取消上一次請求
阿新 • • 發佈:2018-12-15
一、前言
在專案中經常有一些場景會連續傳送多個請求,而非同步會導致最後得到的結果不是我們想要的,並且對效能也有非常大的影響。例如一個搜尋框,每輸入一個字元都要傳送一次請求,但輸入過快的時候其實前面的請求並沒有必要真的傳送出去,這時候就需要在傳送新請求的時候直接取消上一次請求。
二、程式碼
<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>
三、結語
這樣就可以成功取消上一次請求啦!真的非常好用~