鍍金池/ 問答/HTML/ Javascript中,如果事件監(jiān)聽器是異步的,怎樣控制數(shù)據(jù)競爭?

Javascript中,如果事件監(jiān)聽器是異步的,怎樣控制數(shù)據(jù)競爭?

考慮如下代碼

whatever.onclick = async () => {
    const a = await(await fetch('step-1')).text();
    const b = await(await fetch('step-2')).text();
    whatever.textContent = a + b;
}

事件監(jiān)聽器是異步的,所以如果用戶在step-1step-2之間再次點(diǎn)擊的話,就會產(chǎn)生競爭。遠(yuǎn)程是第三方,所以沒法控制。

現(xiàn)在有這幾種可能的需求:

  • 如果前一次請求尚未結(jié)束,丟棄新請求;或
  • 如果前一次請求尚未結(jié)束,新請求應(yīng)當(dāng)和舊請求一起返回;或
  • 如果前一次請求尚未結(jié)束,新請求應(yīng)當(dāng)排隊。

請問有沒有合適的輪子,還是說必須自己造?

感覺這是個很合理的需求啊,為啥loadsh沒有

回答
編輯回答
真難過

給async 設(shè)定一個時間范圍的限制吧,在短時間內(nèi)重復(fù)多次觸發(fā)的click,實際只執(zhí)行一次。

2018年4月3日 12:49