当前位置:首页 > JavaScript

js实现单请求

2026-02-03 06:49:41JavaScript

实现单请求的 JavaScript 方法

在 JavaScript 中实现单请求通常指确保某个操作(如数据加载或提交)仅执行一次,避免重复请求。以下是几种常见场景的实现方式:

使用标志位控制请求

通过布尔变量标记请求状态,防止重复触发:

let isRequesting = false;

function fetchData() {
  if (isRequesting) return;
  isRequesting = true;

  fetch('https://api.example.com/data')
    .then(response => response.json())
    .finally(() => {
      isRequesting = false;
    });
}

基于 Promise 的缓存

对异步请求结果进行缓存,后续调用直接返回缓存的 Promise:

js实现单请求

let requestPromise = null;

function getData() {
  if (!requestPromise) {
    requestPromise = fetch('https://api.example.com/data')
      .then(response => response.json());
  }
  return requestPromise;
}

防抖(Debounce)技术

短时间内多次调用时,仅执行最后一次请求:

function debounce(func, delay) {
  let timeoutId;
  return function() {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => func.apply(this, arguments), delay);
  };
}

const fetchData = debounce(() => {
  fetch('https://api.example.com/data');
}, 500);

AbortController 取消重复请求

利用 AbortController 中止之前的未完成请求:

js实现单请求

let controller = null;

function fetchData() {
  if (controller) controller.abort();
  controller = new AbortController();

  fetch('https://api.example.com/data', {
    signal: controller.signal
  }).catch(err => {
    if (err.name !== 'AbortError') throw err;
  });
}

单例模式封装

将请求逻辑封装为单例,确保全局唯一实例:

class ApiService {
  constructor() {
    if (!ApiService.instance) {
      ApiService.instance = this;
    }
    return ApiService.instance;
  }

  fetchData() {
    return fetch('https://api.example.com/data');
  }
}

const api = new ApiService();
api.fetchData();

根据具体需求选择合适的方法:

  • 简单场景可用标志位或 Promise 缓存
  • 用户频繁操作时建议防抖或 AbortController
  • 需要全局控制时考虑单例模式

标签: js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 //…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…