输入框连续请求中取消上次请请求

我先输入的 1,已经发送请求了,紧接着输入了 2,3,123,如果在我输入最后一次 123 的时候,我第一次输入的 1 还没有请求成功,那请求 query 为 1 的这个接口将会覆盖 query 为 123123 的搜索结果,因为当 1 成功的时候会将最后一次请求的结果覆盖掉,当然这个概率很小很小,现在就这个bug,说一下你的解决思路吧!

点击查看代码
let currentAbortController = null;
    function fetchData(query) {
      // 取消上一次未完成的请求
      if (currentAbortController) {
        currentAbortController.abort();
      }

      // 创建新的 AbortController
      currentAbortController = new AbortController();

      return fetch(`/api/search?q=${query}`, {
        signal: currentAbortController.signal
      })
      .then(response => response.json())
      .then(data => {
        // 处理请求成功的数据
        updateDropdownList(data);
      })
      .catch(error => {
        // 只有在请求未被取消的情况下处理错误
        if (!error.name === 'AbortError') {
          handleError(error);
        }
      });
    }

posted @ 2024-04-12 11:39  jialiangzai  阅读(26)  评论(0)    收藏  举报