最近修改的項(xiàng)目中,有一個(gè)ai的內(nèi)容,大致就是傳遞id給后端,前端不斷地詢(xún)問(wèn)這個(gè)接口直到返回正確的結(jié)果的過(guò)程。這個(gè)過(guò)程中就會(huì)使用到定時(shí)器setTimeout。
在vue中寫(xiě)定時(shí)器,一定要放到date里,使用thisxxx把setTimeout賦值給某個(gè)全局變量,為什么需要這樣做,我們后面說(shuō)。
為了方便和節(jié)省瀏覽器性能,首先需要設(shè)置最大輪詢(xún)次數(shù)和輪詢(xún)時(shí)間,直接var即可。
然后我們創(chuàng)建一個(gè)簡(jiǎn)單的箭頭函數(shù)(也是為了確保能訪問(wèn)到this),箭頭函數(shù)中每次訪問(wèn)都需要使一個(gè)變量增加,然后判斷是否大于設(shè)定的輪詢(xún)最大次數(shù),大于則return掉。
接下來(lái)是一個(gè)請(qǐng)求,我們要根據(jù)后端設(shè)置的內(nèi)容,判斷是否滿(mǎn)足我們的要求。大家可以看一下我下邊的判斷,首先判斷接口是否是正常通信的,如果是200,則會(huì)返回res,如果是錯(cuò)誤,則會(huì)返回err并彈出錯(cuò)誤原因并停止定時(shí)器。如果返回res后,后端的狀態(tài)返回2000并且狀態(tài)為completed完成則把a(bǔ)i返回的內(nèi)容賦值,并且清除定時(shí)器,如果不是2000,則判斷是否有報(bào)錯(cuò),沒(méi)有報(bào)錯(cuò)則繼續(xù)輪詢(xún)。這里最重要的點(diǎn)就是重新給this.pollTimer賦值,重新賦值后,根據(jù)我們?cè)O(shè)定的輪詢(xún)間隔時(shí)間,時(shí)間到達(dá)后會(huì)再次請(qǐng)求我們?cè)O(shè)置的箭頭函數(shù),直到狀態(tài)為completed為止。
我們之前說(shuō)的,為什么一定要把定時(shí)器賦值給變量,因?yàn)槎〞r(shí)器一定要清除,不光是在本頁(yè)面清除,當(dāng)該路由頁(yè)面卸載的時(shí)候,也需要清除,避免跳轉(zhuǎn)到其他頁(yè)面后,這個(gè)定時(shí)器還一直請(qǐng)求接口。