Javascript中,如果事件监听器是异步的,怎样控制数据竞争?

考虑如下代码

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

事件监听器是异步的,所以如果用户在step-1step-2之间再次点击的话,就会产生竞争。远程是第三方,所以没法控制。

现在有这几种可能的需求:

  • 如果前一次请求尚未结束,丢弃新请求;或
  • 如果前一次请求尚未结束,新请求应当和旧请求一起返回;或
  • 如果前一次请求尚未结束,新请求应当排队。

请问有没有合适的轮子,还是说必须自己造?

感觉这是个很合理的需求啊,为啥loadsh没有

阅读 1.9k
1 个回答

给async 设定一个时间范围的限制吧,在短时间内重复多次触发的click,实际只执行一次。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏