vue輪詢請求解決方案的完整實例
輪詢的理解
其實輪詢的重點在于間隔多少時間執(zhí)行一次,而并非循環(huán)本身。ajax是異步請求,從發(fā)起請求到接受到響應(yīng)即為一個完整的過程,這個過程所需要的時間是無法預(yù)料的,說的極端點,若請求所需的時間超過了我們輪詢的間隔時間,那么是會出現(xiàn)很多問題的,所以輪詢的間隔應(yīng)該是在確保這個請求過程完成的基礎(chǔ)之上的,這也更符合邏輯。
業(yè)務(wù)描述:
- 頁面初始化顯示第一頁數(shù)據(jù),隨后每隔十秒當(dāng)前頁數(shù)據(jù)刷新
- 更改篩選條件或者更改頁碼直接刷新數(shù)據(jù),隨后每個十秒當(dāng)前也數(shù)據(jù)刷新
業(yè)務(wù)邏輯點分析:
- 手動調(diào)用時,立即執(zhí)行發(fā)起請求
- 隨后每隔十秒執(zhí)行一次,刷新一次列表
實現(xiàn)思路
- 直接先調(diào)用請求
- 在請求的成功回調(diào)函數(shù)中設(shè)置定時器setTimeout
- 在定時器內(nèi)重復(fù)1.2操作
- 將1.2.3步驟封裝為遞歸函數(shù)
// 輪詢方法
polling (page) {
this.getWorks(page).then(res => {
this.pollingST = setTimeout(() => {
clearTimeout(this.pollingST)
this.polling(page)
}, 10000)
})
}
為什么不采用setInterval
setInterval的功能看似是完美符合輪詢的概念,若我們的操作是同步代碼,那么使用setInterval是沒有任何問題的,問題就出在setInterval不夠靈活,我們無法得知上一次請求是否已經(jīng)完畢。所以setTimeout會更好一些。
需要注意的地方
在輪詢中我將定時器用pollingST變量記錄了下來,每次執(zhí)行前必須先清除上一個定時器,因為遞歸的調(diào)用是在定時器內(nèi)部,所以通過清除定時器就能很方便的結(jié)束輪詢
完整偽代碼
<script>
export default {
data () {
return {
pollingST: null
}
},
methods: {
// 分頁change事件
pageChange (params) {
// 清除現(xiàn)有定時器
clearTimeout(this.pollingST)
// 調(diào)用輪詢
this.polling(params)
},
// 請求接口方法
getWorks () {
return new Promise(resolve => resolve({}))
},
// 輪詢方法
polling (params) {
this.getWorks(params).then(res => {
this.pollingST = setTimeout(() => {
clearTimeout(this.pollingST)
this.polling(params)
}, 10000)
})
}
},
created () {
// 調(diào)用輪詢
this.polling({ page: 1, pageSize: 5 })
},
destroyed () {
clearTimeout(this.pollingST)
}
}
</script>
總結(jié)
到此這篇關(guān)于vue輪詢解決方案的文章就介紹到這了,更多相關(guān)vue輪詢解決內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3自定義確認(rèn)密碼匹配驗證規(guī)則的操作代碼
這篇文章主要介紹了vue3自定義確認(rèn)密碼匹配驗證規(guī)則的操作代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
vue+axios+mock.js環(huán)境搭建的方法步驟
本篇文章主要介紹了vue+axios+mock.js環(huán)境搭建的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08
vuejs使用FormData實現(xiàn)ajax上傳圖片文件
本篇文章主要介紹了vuejs使用FormData實現(xiàn)ajax上傳圖片文件,具有一定的參考價值,有興趣的可以了解一下2017-08-08
vue+django實現(xiàn)一對一聊天功能的實例代碼
這篇文章主要介紹了vue+django實現(xiàn)一對一聊天功能,主要是通過websocket,由于Django不支持websocket,所以我使用了django-channels。,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-07-07

