背景下午4点,天气晴朗,等待上班。产品:希望页面数据实时变化。开发:...对,用那个叫WebSocket的东西,找个封装好的框架,比如:mqtt(感觉好机智)产品:开发时间会长开发:嗯,三天,五天,还是...产品:希望今天上线开发:...,...,...(无法描述的语言,为什么segmentfault不支持表情)开发:果断选择轮询开发
轮询的坑开发:今晚的月亮真圆,我下班了……第二天产品:希望这个能实时加载想怎么玩就怎么玩,我叫它加载就加载,什么时候停止研发我告诉它停止:(在石化...)继续开发
投票坑暂停开发:(实现了这么难得的需求,我是不是已经是专家了,是不是应该升职加薪,然后赢娶白富美,走上人生巅峰,哈哈哈)我是陶醉自己结果里的产品:你的有bug开发:(绝对不信,肯定是你拿鼠标姿势不对,手感不好),怎么会有bug,你是不是环境有问题,还在用ie6,多刷新几次次品:···,你多点几次按钮,点击快点,试试,数据会请求开发很多次:半信半疑地试了一下,确实是(很奇怪,查了一下没有发现问题)一旦分析过程进入页面,执行start()。start是一个async函数,这样里面的asynchronous也会像synchronously一样执行。函数最后,timerId=setTimeout(start,1000),1000毫秒后再次执行start(),形成轮询(这里每次请求的间隔必须大于1000+500,至于为什么,你可以了解一下浏览器的异步执行原理)将setTimeout的id赋值给timerId,点击按钮,清空当前定时器貌似没有问题。当你找不到问题时,你只需要一点点试错。最后,你发现去掉const{data}=awaitgetData()后,问题就消失了。请求时间越长,出现的概率越高画图先分析。我们来看看js的执行过程。按钮的点击事件也相当于异步。然后我们将分析文本。问题的原因。如果没有const{data}=awaitgetData()step,点击的时候,可以执行click的回调函数,说明当前js一定是空闲状态(永远记住,js是单线程的),在这个时候setTimeout(start,1000)肯定是异步状态(js一次只能执行一个任务),clearTimeout(timerId)可以很方便的清除这个任务,不会让它进入js执行线程执行。添加const{data}=awaitgetData()后,如果js现在在setTimeout的回调函数已经执行完等待awaitgetData(),js空闲,click可以执行,click清除setTimeout回调的执行function(回调函数已经执行),并没有清除awaitgetData()回调函数的执行,代码会继续执行console。日志(数据);timerId=setTimeout(start,1000),所以循环不能停止,这就是bug的原因bug的计时是为什么,请求时间越长,出现的概率越高解决办法>html>投票坑暂停