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

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

場景

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

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

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

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

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

2. 基于約定回調(diào)的條件式回調(diào)函數(shù)

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

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);
      }
}

 

標(biāo)簽: JavaScript
主站蜘蛛池模板: 国产亚洲精品美女一区二区 | 激情综合网婷婷 | 亚洲呦呦 | 精品二区| 亚洲国产激情在线一区 | 欧美日本韩国一区二区 | 超级香蕉97在线观看视频 | 亚洲图片一区二区 | 女人被狂躁后的视频免费 | 亚洲视频在线不卡 | 男女爱爱免费高清 | 一级毛片高清免费播放 | 一区二区精品在线 | 99久久免费看国产精品 | 国产黄色片在线播放 | 国产一国产a一级毛片 | 欧洲色综合 | 午夜激情在线视频 | 一级免费黄色大片 | 色5月婷婷 | 精产网红自拍在线 | 国产精品青草久久久久福利99 | 91视频麻豆 | 男女交性高清全过程无遮挡 | 男女免费爽爽爽在线视频 | 日韩精品一区二区三区免费视频 | 久久精品国产精品亚洲精品 | 成人综合久久综合 | 亚洲日本人成中文字幕 | 成人免费在线播放视频 | 精品日韩欧美 | 国产欧美一区二区三区在线 | 久青草青综合在线视频 | 亚洲狠狠网站色噜噜 | 网站一级片 | 久久久久久久久a免费 | 日本性生活网站 | 特级毛片s级全部免费 | 精品无码三级在线观看视频 | 国产亚洲精品激情一区二区三区 | 国产ar高清视频+视频 |