亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

瀏覽:136日期: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
主站蜘蛛池模板: 一区二区三区精品国产欧美 | 免费视频网站一级人爱视频 | 在线观看免费网址大全 | 亚洲地址一地址二地址三 | 日本大学生免费一级一片 | 中文日韩字幕一区在线观看 | 神马午夜dy888 | 国产精品偷伦视频免费观看的 | 狠狠亚洲婷婷综合色香 | 国产一级片网址 | 无遮挡高清一级毛片免费 | 91精品福利久久久 | 午夜插插| 国产精品色片 | 边做边摸边揉的免费视频 | 一区二区三区四 | 欧美一区二区三区久久综 | 特级毛片aaaa级毛片免费 | 亚洲免费看片 | 国产精品免费入口视频 | 欧美成人亚洲综合精品欧美激情 | 美女制服一二三区 | 久久久久国产一级毛片高清片 | a毛片免费观看 | 欧美在线精品一区二区在线观看 | 777色淫网站女女 | 国产精品成人亚洲 | 97色婷婷成人综合在线观看 | 91精品国产福利尤物免费 | 国产精品色午夜视频免费看 | 国产精品亚洲第一区焦香 | 免费一级网站免费 | 日韩欧美国产中文 | 一级毛片a女人刺激视频免费 | 亚洲一区二区三区在线观看蜜桃 | 一级日韩| 妖精视频在线观看网站 | 窝窝午夜色视频国产精品东北 | 国产免费一区2区3区4区 | 成人欧美视频在线观看播放 | 国产午夜精品久久久久免费视小说 |