色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

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

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

場(chǎng)景

相信很多人都遇到過類似的場(chǎng)景:

某一個(gè)按鈕是用來(lái)發(fā)送請(qǐng)求的,并且需要一段時(shí)間來(lái)處理。但是用戶往往會(huì)在處理期間有意或無(wú)意地點(diǎn)擊多次,因此我們希望在上一次發(fā)出的請(qǐng)求處理完畢之前,不再發(fā)出新的請(qǐng)求。

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

“特事特辦”的意思,就是每次遇到這樣的場(chǎng)景,都特意寫一段邏輯來(lái)處理:

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

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

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

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
主站蜘蛛池模板: 精品一区二区在线欧美日韩 | 欧洲亚洲综合一区二区三区 | 国产亚洲高清视频 | 一个人看的免费高清视频日本 | 欧美成人亚洲欧美成人 | 久久久久久一级毛片免费无遮挡 | 久久99精品一级毛片 | 12至16末成年毛片视频 | 国产精品综合一区二区 | 成年女人午夜免费视频 | 成年美女黄网站色视频大全免费 | 日韩在线一区二区 | 情侣自拍啪啪 | 精品日韩欧美 | 午夜毛片不卡高清免费 | 毛片免费观看视频 | 中国一级特黄大片毛片 | 久久亚洲精品无码观看不卡 | 精品国产自在在线在线观看 | 国产成人免费观看 | 精品成人久久 | 国产成人精品久久亚洲高清不卡 | 美女张开腿黄网站免费国产 | 最近中文字幕在线 | 中文 | 97在线观看成人免费视频 | 一级欧美在线的视频 | 日产一区二区三区四区 | 天天碰夜夜操 | 男女性关系视频免费观看软件 | 日本午色www高清视频 | 久久精品国产免费观看99 | 女在床上被男的插爽叫视频 | 欧美一级aa天码毛片 | 国产大乳孕妇喷奶水在线观看 | 一区二区三区国产 | 久久一本色系列综合色 | 亚洲精品综合一区二区三区在线 | 在线观看黄网 | 久久久精品久久视频只有精品 | 亚洲精品一区二区三区美女 | 国产亚洲高清视频 |