在前端頁面數據查詢時,可能會遇到實時搜索的需求。在實時搜索時,就可能存在一個問題,就是後一次請求數據被前一次覆蓋的問題。前端
vue項目,使用axios發請求vue
在axios中有提供一個取消請求的方法,下面是示例代碼ios
const CancelToken = axios.CancelToken; const source = CancelToken.source(); axios.get('/user/12345', { cancelToken: source.token }).catch(function (thrown) { if (axios.isCancel(thrown)) { console.log('Request canceled', thrown.message); } else { // handle error } }); axios.post('/user/12345', { name: 'new name' }, { cancelToken: source.token }) // cancel the request (the message parameter is optional) source.cancel('Operation canceled by the user.');
那麼這樣,咱們只須要在每一次請求以前,調用cancel方法就能夠取消前一次請求,就不會存在數據覆蓋問題啦。axios
經過查看axios源碼,發現cancel方法其實是調用XMLHttpRequest.abort()
實現的。
實際上,後臺接收到前端的http請求後,就算前端調用了cancel方法,可是後臺仍是會對請求進行處理。那麼咱們目前對實時請求的解決方案並不能減小後臺處理無用請求的次數。post
針對以上問題,若是想同時減小後臺查詢的壓力,咱們能夠給查詢方法加一層防抖處理。可是這樣有一個弊端就是,查詢請求會有延時。code