电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JS實現"上次操作未完成禁止新操作"邏輯特事特辦方案

瀏覽:152日期:2022-06-10 11:31:56
目錄
  • 場景
  • 1.初步解決方案:特事特辦
  • 2. 基于約定回調的條件式回調函數
  • 3. 基于 Promise 的條件式回調函數
  • 4. React hook 版

場景

相信很多人都遇到過類似的場景:

某一個按鈕是用來發送請求的,并且需要一段時間來處理。但是用戶往往會在處理期間有意或無意地點擊多次,因此我們希望在上一次發出的請求處理完畢之前,不再發出新的請求。

1.初步解決方案:特事特辦

“特事特辦”的意思,就是每次遇到這樣的場景,都特意寫一段邏輯來處理:

document.addEventListener("click", (() => {
    let lock = false;
    return () => {
if(lock) return;
lock = true;
console.log("clicked");
// 為了方便測試就使用延時了
setTimeout(() => {
    lock = false;
}, Math.random() * 4e3)
    }
})());

2. 基于約定回調的條件式回調函數

上面的寫法其實也不費事,但是這種條件限制能不能像已經被面試問爛了的“節流”和“防抖”那樣,用一個函數把它包裹起來就可以達成效果呢?
問題的關鍵其實在于:防抖和節流需要考慮的執行條件是時間,這個條件對于所有函數而言都是一個“共同的語言”,因此才雙方可以做到那樣的“默契”。
而要在這種場景里實現同樣的效果,雙方需要刻意的約定:例如被條件執行的函數額外接受一個函數,用于在合適的時機解除條件限制。

function conditioned(callback:(release:Function,...args:any[]) => any){
    let lock = false;
      return function(...args:any[]){
if(lock) return;
lock = true;
callback.call(this, () => {
      lock = false;
}, ...args);
      }
}

 

標簽: JavaScript
主站蜘蛛池模板: 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 行星齿轮减速机,减速机厂家,山东减速机-淄博兴江机械制造 | 洗砂机械-球磨制砂机-洗沙制砂机械设备_青州冠诚重工机械有限公司 | 全自动定氮仪-半自动凯氏定氮仪厂家-祎鸿仪器 | 干培两用箱-细菌恒温培养箱-菲斯福仪器 | 低温等离子清洗机(双气路进口)-嘉润万丰 | 陕西安玻璃自动感应门-自动重叠门-磁悬浮平开门厂家【捷申达门业】 | 直读光谱仪,光谱分析仪,手持式光谱仪,碳硫分析仪,创想仪器官网 | 结晶点测定仪-润滑脂滴点测定仪-大连煜烁 | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | SF6环境监测系统-接地环流在线监测装置-瑟恩实业 | 膜片万向弹性联轴器-冲压铸造模具「沧州昌运模具」 | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 水成膜泡沫灭火剂_氟蛋白泡沫液_河南新乡骏华消防科技厂家 | 皮带机_移动皮带机_大倾角皮带机_皮带机厂家 - 新乡市国盛机械设备有限公司 | 团建-拓展-拓展培训-拓展训练-户外拓展训练基地[无锡劲途] | 橡胶弹簧|复合弹簧|橡胶球|振动筛配件-新乡市永鑫橡胶厂 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 国产频谱分析仪-国产网络分析仪-上海坚融实业有限公司 | 重庆小面培训_重庆小面技术培训学习班哪家好【终身免费复学】 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 进口消泡剂-道康宁消泡剂-陶氏消泡剂-大洋消泡剂 | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 私人别墅家庭影院系统_家庭影院音响_家庭影院装修设计公司-邦牛影音 | UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 注塑机-压铸机-塑料注塑机-卧式注塑机-高速注塑机-单缸注塑机厂家-广东联升精密智能装备科技有限公司 | 上海诺狮景观规划设计有限公司| PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 机械加工_绞车配件_立式离心机_减速机-洛阳三永机械厂 | 济南律师,济南法律咨询,山东法律顾问-山东沃德律师事务所 | 红外光谱仪维修_二手红外光谱仪_红外压片机_红外附件-天津博精仪器 | 阜阳在线-阜阳综合门户| 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 | 卸料器-卸灰阀-卸料阀-瑞安市天蓝环保设备有限公司 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | 电子厂招聘_工厂招聘_普工招聘_小时工招聘信息平台-众立方招工网 | 广东风淋室_广东风淋室厂家_广东风淋室价格_广州开源_传递窗_FFU-广州开源净化科技有限公司 |