热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

js輪詢及踩過的坑

背景下晝四點,天氣晴朗,陽光明媚,等着放工產物:我願望頁面上的這個數據及時變化開闢:···,可以,用誰人叫着WebSocket的東西,再找一個封裝好框架,如:mqtt(覺得本身好機

背景

下晝四點,天氣晴朗,陽光明媚,等着放工
產物:我願望頁面上的這個數據及時變化
開闢:···,可以,用誰人叫着WebSocket的東西,再找一個封裝好框架,如:mqtt(覺得本身好機靈)
產物:要開闢良久
開闢:嗯,三天,五天,照樣···
產物:我願望本日上線
開闢:···,···,···(不能形貌的言語,話說segmentfault為何不支持臉色)
開闢:堅決挑選輪詢

開闢中










開闢:今晚的玉輪真圓啊,放工了···

第二天

產物:我願望這個及時加載,能為所欲為,我喊它加載就加載,喊它停就停
研發:(石化中···)

繼承開闢中












開闢:(這麼難過需求我都完成了,我是否是已是專家了,我是否是應當升職加薪,接着贏娶白富美,走向人生頂峰,哈哈哈)
正沉醉於本身的效果中
產物:你的有bug
開闢:(絕對不信中,肯定是你握鼠標的姿態不對,手感不好),怎樣可能有bug,你是否是環境有題目,還在用ie6,多革新頻頻
產物:···,你按鈕多點頻頻,點快點,嘗嘗,數據會屢次要求
開闢:將信將疑的去嘗試,還真是(好新鮮,搜檢了一圈沒有發明任何題目)

剖析歷程

  1. 一進去頁面實行start(),start是一個async函數,使得內里的異步也會像同步一樣實行,函數的末端timerId = setTimeout(start, 1000),1000毫秒后再次實行start(),形成了一個輪詢(這裏的每個要求之間的距離肯定是大於1000+500的,至於為何,可以去相識一下瀏覽器異步實行道理)
  2. 將setTimeout的id賦值給timerId,點擊按鈕后,消滅當前定時器

看似沒有任何題目,找不到題目的時刻就只要一點點試錯,終究發明去掉const { data } = await getData()以後,題目消逝,要求的時候越長,湧現的幾率越高
畫個圖剖析一下
《js輪詢及踩過的坑》
先看一下js實行歷程,按鈕的click事宜也相當於異步,然後我們再來筆墨剖析一下,題目湧現的緣由

bug湧現緣由

  1. 假如沒有const { data } = await getData()這步,點擊的時刻,click的回調函數可以實行,申明當前js肯定處於餘暇狀況(永久記着,js的單線程的),這時候的setTimeout(start, 1000)肯定處於異步狀況(js一次只要實行一個使命),
  2. clearTimeout(timerId)可以很輕鬆的消滅此次使命,不會讓它進入js實行線程中實行
  3. 加上const { data } = await getData()以後,假如js如今處於setTimeout的回調函數已實行而且守候await getData()中,js是餘暇的,click可以實行,click消滅了setTimeout的回調函數的實行(回調函數已實行了),沒有消滅await getData()回調函數的實行,代碼會繼承實行console.log(data);timerId = setTimeout(start, 1000),從而不能住手輪迴,這就是bug發生的緣由

bug發生的機遇
《js輪詢及踩過的坑》

這就是為何,要求的時候越長,湧現的幾率越高

解決方案













推荐阅读
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
author-avatar
許宸瑜_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有