<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        vue項目開發中setTimeout等定時器的管理問題

        來源:懂視網 責編:小采 時間:2020-11-27 22:07:53
        文檔

        vue項目開發中setTimeout等定時器的管理問題

        vue項目開發中setTimeout等定時器的管理問題:一、問題來源。 在項目中,我們經常有這樣的需求,一個頁面初始化后,需要不斷的去請求后端,來獲取當前某個記錄的最新狀態。 顯然,這個可以用setTimeout以及回調中繼續setTimeout來實現。 我們假設定時器是在頁面#/test/aaa上創建的。 但是,會遇到以下兩
        推薦度:
        導讀vue項目開發中setTimeout等定時器的管理問題:一、問題來源。 在項目中,我們經常有這樣的需求,一個頁面初始化后,需要不斷的去請求后端,來獲取當前某個記錄的最新狀態。 顯然,這個可以用setTimeout以及回調中繼續setTimeout來實現。 我們假設定時器是在頁面#/test/aaa上創建的。 但是,會遇到以下兩

        一、問題來源。

        在項目中,我們經常有這樣的需求,一個頁面初始化后,需要不斷的去請求后端,來獲取當前某個記錄的最新狀態。

        顯然,這個可以用setTimeout以及回調中繼續setTimeout來實現。

        我們假設定時器是在頁面#/test/aaa上創建的。

        但是,會遇到以下兩個問題,我從#/test/aaa   這個頁面切換到  #/test/bbb頁面后如果停留在#/test/bbb,定時器還在跑。

        其次,如果我不斷在#/test/aaa 和 #/test/bbb兩個頁面之間不斷的切換,而且切換時間小于定時器的間隔時間時,也會出現

        重復創建setTimeout的情況。

        現在的問題就是,我們如何做到管理定時器。

        二、示例代碼。

        created() {
         if ( this.timeOut ) {
         clearTimeout(this.timeOut);
         }
         this.getListIng();
        },
        computed: {
         timeOut: {
         set (val) {
         this.$store.state.timeout.compileTimeout = val;
         },
         get() {
         return this.$store.state.timeout.compileTimeout;
         }
         },
        },
        methods: {
         getListIng() {
         // 這里是一個http的異步請求
         if ( getUrlModule() == 'aaa' ) {
         let _this = this;
         this.timeOut = setTimeout(() => {
         _this.getListIng();
         }, 5000);
         } else {
         this.timeOut = '';
         }
         },
        }

        (1)如上面代碼所示,當創建頁面(created執行)時,會先判斷變量this.timeOut是否存在,如果存在,先clearTimeout掉。

        (2)而,this.timeOut這個變量對應的是全局store里的this.$store.state.timeout.compileTimeout。并且是雙向綁定的,這個

        請自行搜索vue2.0中computed用法。

         (3)在我們的主函數getListIng()中,會先使用函數getUrlModule()根據url判斷當前頁面是否是aaa頁面,如果是的,就執行setTimeOut,

        如果不是,就不行執行了,并且設置this.timeOut = '';

        我們假設上面沒有if ( getUrlModule() == 'aaa' ) 這句判斷,會出現,當我們已經跳出了當前aaa頁面,去了bbb頁面并且一直停留在bbb頁面時,

        還有setTimeout在執行,就會不斷有http的請求。

        如果沒有if ( this.timeOut ) { clearTimeout(this.timeOut); } 這句代碼。當我們不斷在2個頁面之間切換時,且切換的頻率很高。會出現多次創建

        setTimeout的情況。這個邏輯稍微有點繞,請閱讀者自行演算。

        三、我們必須清楚的事實。

        (1)vue中$store里創建的變量,其實是全局變量,這個變量在切換頁面時不會清除,當我們刷新頁面時會清除掉。

        (2)在前端頁面中,當我們刷新頁面時,會將當前頁面之前創建的setTimeout以及其他定時器都清除掉。但是,切換頁面(僅僅是路由切換)

        是不會清除的。

        (3)setTimeout、setinterval有本質的不同,前者只執行一次,除非你在回調中,不斷的調用,而后者是不間斷調用的。但是,我在各種實踐中發現,

        還是setTimeout好用。因為,setTimeout可以根據條件,及時在回調中停用。如果采用setinterval,我們很有可能捕捉不到停用的條件而無法停用。

        補充:Vue之SetTimeout

        1.前言

        相信很多人都遇到過這樣的問題,頁面數據需要不斷的刷新,也就是不斷的發送ajax請求來更新數據,那么在vue中怎樣做才比較好呢?這里介紹一下我踩的坑,以及解決方案

        2.問題

        settimeout用來調用請求數據,但是我遇到的問題就是,沒有用合適的方式去關閉settimeout,出現了離開當前頁面,請求還在不斷的發送問題,這樣給服務器帶來了無必要的壓力。附上之前的代碼:

        self.deployTimeOutId = setTimeout(() => {
         self.getDeployList(false);
         }, 5000);

        說明:這一段代碼是嵌在getDeployList方法中的,離開當前頁面的是時候,必須要去手動的把這個settimeout清除才行。一般這個寫在destoryed()這個鉤子里。

        window.clearTimeout(this.deployTimeOutId);

        雖然這樣處理了,但在邏輯比較復雜的情況下,還是出現了沒有關閉的情況,而且排查起來很痛苦。下面介紹一種針對Vue比較好的做法。

        3.解決方案

         let self=this;
         if (self && !self._isDestroyed) {
         setTimeout(() => {
         if (self && !self._isDestroyed)
         self.getDeployList();
         }, 5000);
         }

        _isDestroyed這個屬性表示的是當前這個組件是否有被銷毀,true表示當前的組件已經被銷毀,通過上面這個判斷,我們就不需要自己手動的去用ID來清除了,這個就相當于遞歸嘛,有了一個結束判斷,避免了死循環咯~~

        總結

        以上所述是小編給大家介紹的vue項目開發中setTimeout等定時器的管理問題,希望對大家有所幫助,如果大家有任何疑問請

        給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        vue項目開發中setTimeout等定時器的管理問題

        vue項目開發中setTimeout等定時器的管理問題:一、問題來源。 在項目中,我們經常有這樣的需求,一個頁面初始化后,需要不斷的去請求后端,來獲取當前某個記錄的最新狀態。 顯然,這個可以用setTimeout以及回調中繼續setTimeout來實現。 我們假設定時器是在頁面#/test/aaa上創建的。 但是,會遇到以下兩
        推薦度:
        標簽: timeout 項目中 set
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 一级**爱片免费视频| 国产精品亚洲专区无码唯爱网| 中文字幕在线观看免费| 亚洲国产精品国自产电影| 成年网在线观看免费观看网址 | 国产99在线|亚洲| 99久久国产热无码精品免费| 亚洲日本在线观看网址| 中文字幕乱码免费视频| 在线观看亚洲AV日韩AV| 日本永久免费a∨在线视频| 国产一区二区三区免费在线观看| 亚洲精品第一国产综合亚AV| 又爽又高潮的BB视频免费看| 亚洲欧洲国产精品香蕉网| 永久免费av无码入口国语片| 久久久无码精品亚洲日韩蜜臀浪潮 | 亚洲色av性色在线观无码| 黄页网站在线视频免费| 亚洲av无码成人精品区在线播放| 无码日韩人妻AV一区免费l| 77777亚洲午夜久久多人| 午夜精品一区二区三区免费视频| 亚洲国产高清视频在线观看| 日韩欧美一区二区三区免费观看| 国产亚洲综合精品一区二区三区| 中文字幕不卡亚洲| 99在线精品免费视频九九视| 理论亚洲区美一区二区三区| 亚洲一区二区三区无码中文字幕| 日韩内射激情视频在线播放免费| 狠狠色香婷婷久久亚洲精品| 亚洲国产香蕉人人爽成AV片久久| 日本在线免费播放| 亚洲精品无码专区在线播放| 免费精品国产自产拍在线观看图片| 亚洲AV无一区二区三区久久| 韩国免费一级成人毛片| 一级做a爱过程免费视频高清| 亚洲AV无码成人精品区蜜桃| 四虎免费大片aⅴ入口|