摘要:背景下午四點(diǎn),天氣晴朗,陽(yáng)光明媚,等著下班產(chǎn)品我希望頁(yè)面上的這個(gè)數(shù)據(jù)實(shí)時(shí)變化開(kāi)發(fā),可以,用那個(gè)叫著的東西,再找一個(gè)封裝好框架,如感覺(jué)自己好機(jī)智產(chǎn)品要開(kāi)發(fā)好久開(kāi)發(fā)嗯,三天,五天,還是產(chǎn)品我希望今天上線開(kāi)發(fā),,不能描述的語(yǔ)言,話說(shuō)為什么不支持表
背景
下午四點(diǎn),天氣晴朗,陽(yáng)光明媚,等著下班
產(chǎn)品:我希望頁(yè)面上的這個(gè)數(shù)據(jù)實(shí)時(shí)變化
開(kāi)發(fā):···,可以,用那個(gè)叫著WebSocket的東西,再找一個(gè)封裝好框架,如:mqtt(感覺(jué)自己好機(jī)智)
產(chǎn)品:要開(kāi)發(fā)好久
開(kāi)發(fā):嗯,三天,五天,還是···
產(chǎn)品:我希望今天上線
開(kāi)發(fā):···,···,···(不能描述的語(yǔ)言,話說(shuō)segmentfault為什么不支持表情)
開(kāi)發(fā):果斷選擇輪詢(xún)
輪詢(xún)的坑
開(kāi)發(fā):今晚的月亮真圓啊,下班了···
第二天產(chǎn)品:我希望這個(gè)實(shí)時(shí)加載,能隨心所欲,我喊它加載就加載,喊它停就停
研發(fā):(石化中···)
輪詢(xún)的坑
開(kāi)發(fā):(這么難得需求我都實(shí)現(xiàn)了,我是不是已經(jīng)是專(zhuān)家了,我是不是應(yīng)該升職加薪,接著贏娶白富美,走向人生巔峰,哈哈哈)
正沉醉于自己的成果中
產(chǎn)品:你的有bug
開(kāi)發(fā):(絕對(duì)不信中,肯定是你握鼠標(biāo)的姿勢(shì)不對(duì),手感不好),怎么可能有bug,你是不是環(huán)境有問(wèn)題,還在用ie6,多刷新幾次
產(chǎn)品:···,你按鈕多點(diǎn)幾次,點(diǎn)快點(diǎn),試試,數(shù)據(jù)會(huì)多次請(qǐng)求
開(kāi)發(fā):半信半疑的去嘗試,還真是(好奇怪,檢查了一圈沒(méi)有發(fā)現(xiàn)任何問(wèn)題)
一進(jìn)去頁(yè)面執(zhí)行start(),start是一個(gè)async函數(shù),使得里面的異步也會(huì)像同步一樣執(zhí)行,函數(shù)的末尾timerId = setTimeout(start, 1000),1000毫秒后再次執(zhí)行start(),形成了一個(gè)輪詢(xún)(這里的每一個(gè)請(qǐng)求之間的間隔肯定是大于1000+500的,至于為什么,可以去了解一下瀏覽器異步執(zhí)行原理)
將setTimeout的id賦值給timerId,點(diǎn)擊按鈕后,清除當(dāng)前定時(shí)器
看似沒(méi)有任何問(wèn)題,找不到問(wèn)題的時(shí)候就只有一點(diǎn)點(diǎn)試錯(cuò),最終發(fā)現(xiàn)去掉const { data } = await getData()之后,問(wèn)題消失,請(qǐng)求的時(shí)間越長(zhǎng),出現(xiàn)的概率越高
畫(huà)個(gè)圖分析一下
先看一下js執(zhí)行過(guò)程,按鈕的click事件也相當(dāng)于異步,然后我們?cè)賮?lái)文字分析一下,問(wèn)題出現(xiàn)的原因
假如沒(méi)有const { data } = await getData()這步,點(diǎn)擊的時(shí)候,click的回調(diào)函數(shù)能夠執(zhí)行,說(shuō)明當(dāng)前js肯定處于空閑狀態(tài)(永遠(yuǎn)記住,js的單線程的),這時(shí)的setTimeout(start, 1000)一定處于異步狀態(tài)(js一次只有執(zhí)行一個(gè)任務(wù)),
clearTimeout(timerId)可以很輕松的清除這次任務(wù),不會(huì)讓它進(jìn)入js執(zhí)行線程中執(zhí)行
加上const { data } = await getData()之后,如果js現(xiàn)在處于setTimeout的回調(diào)函數(shù)已經(jīng)執(zhí)行并且等待await getData()中,js是空閑的,click可以執(zhí)行,click清除了setTimeout的回調(diào)函數(shù)的執(zhí)行(回調(diào)函數(shù)已經(jīng)執(zhí)行了),沒(méi)有清除await getData()回調(diào)函數(shù)的執(zhí)行,代碼會(huì)繼續(xù)執(zhí)行console.log(data);timerId = setTimeout(start, 1000),從而不能停止循環(huán),這就是bug產(chǎn)生的原因
bug產(chǎn)生的時(shí)機(jī)
這就是為什么,請(qǐng)求的時(shí)間越長(zhǎng),出現(xiàn)的概率越高
解決方案輪詢(xún)的坑
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/94375.html
摘要:背景下午四點(diǎn),天氣晴朗,陽(yáng)光明媚,等著下班產(chǎn)品我希望頁(yè)面上的這個(gè)數(shù)據(jù)實(shí)時(shí)變化開(kāi)發(fā),可以,用那個(gè)叫著的東西,再找一個(gè)封裝好框架,如感覺(jué)自己好機(jī)智產(chǎn)品要開(kāi)發(fā)好久開(kāi)發(fā)嗯,三天,五天,還是產(chǎn)品我希望今天上線開(kāi)發(fā),,不能描述的語(yǔ)言,話說(shuō)為什么不支持表 背景 下午四點(diǎn),天氣晴朗,陽(yáng)光明媚,等著下班產(chǎn)品:我希望頁(yè)面上的這個(gè)數(shù)據(jù)實(shí)時(shí)變化開(kāi)發(fā):···,可以,用那個(gè)叫著WebSocket的東西,再找一個(gè)封...
摘要:本次會(huì)議的大部分資料都可在以下地址下載在上分享了京的一些內(nèi)容會(huì)議主要內(nèi)容為前端的相關(guān)優(yōu)化以及服務(wù)器端的相關(guān)技術(shù)分享。這是這次北京之行的意外收獲,號(hào)稱(chēng)是下一代應(yīng)用的開(kāi)發(fā)框架,在會(huì)議中也有不少講師提到這個(gè)框架,現(xiàn)場(chǎng)也有出售關(guān)于這個(gè)框架的書(shū)籍。 本次會(huì)議的大部分資料都可在以下地址下載: http://vdisk.weibo.com/u/1744667943 sam_在blog上分享了京J...
摘要:最后發(fā)現(xiàn)使用子進(jìn)程打開(kāi)還真的就是使用到一定程度就掛掉。上面的簡(jiǎn)單流程就是啟動(dòng)一個(gè)子進(jìn)程。邏輯就是,記錄子進(jìn)程的大小,一旦超過(guò)就掉子進(jìn)程。我們?cè)谑褂脮r(shí),不知道設(shè)置,默認(rèn)的是當(dāng)我們子進(jìn)程日志達(dá)到時(shí),自動(dòng)掉了。 showImg(https://segmentfault.com/img/bVrCnh); 如何在項(xiàng)目中實(shí)現(xiàn)熱更新中提到的一個(gè)坑child_process的exec使用問(wèn)題,下面文章...
摘要:在實(shí)際開(kāi)發(fā)中,前后端分離的項(xiàng)目通常會(huì)需要同后臺(tái)開(kāi)發(fā)人員聯(lián)調(diào)接口,不可避免的會(huì)碰到跨域的問(wèn)題。 在實(shí)際開(kāi)發(fā)中,前后端分離的項(xiàng)目通常會(huì)需要同后臺(tái)開(kāi)發(fā)人員聯(lián)調(diào)接口,不可避免的會(huì)碰到跨域的問(wèn)題。雖說(shuō)跨域問(wèn)題最后基本都是后臺(tái)同事解決的,但是有時(shí)候?yàn)榱粟s時(shí)間,沒(méi)轍只有自己來(lái),使用node代理解決 跨域:協(xié)議 域名 端口號(hào) 三個(gè)只要有一個(gè)不一樣就是跨域,也就是不同域名之間的訪問(wèn); 通常解決跨域的...
閱讀 3774·2021-11-11 11:00
閱讀 2244·2021-10-08 10:05
閱讀 2938·2021-10-08 10:04
閱讀 3275·2021-09-30 09:48
閱讀 3965·2021-09-27 14:10
閱讀 1781·2021-09-09 09:33
閱讀 2183·2019-08-30 15:55
閱讀 1660·2019-08-30 13:53