前端并发多个相同的求,如何控制只发一个?

11 min read

可以使用一个“锁”来控制只发出一个请求,可以使用以下步骤来实现:

  1. 在发出请求前设置一个“锁”,表示当前已经有一个请求正在进行中。
  2. 发出请求前先检查“锁”的状态,如果已经被锁住,则直接返回或者等待一段时间后再次检查。
  3. 当请求完成后,释放“锁”,使得其他请求可以继续发出。

以下是一个示例代码:

// 创建一个锁对象
var requestLock = {
  locked: false
};

// 发出请求
function sendRequest() {
  // 检查锁状态
  if(requestLock.locked) {
    return;
  }

  // 锁定
  requestLock.locked = true;

  // 发送请求
  fetch('/api/data')
    .then(function(response) {
      // 处理请求结果
      // ...

      // 解锁
      requestLock.locked = false;
    });
}

当有多个同时发出请求时,只有第一个请求会被执行,其他请求会直接返回,等待第一个请求完成后再次检查锁状态。