当前位置:首页 > JavaScript

js实现timeout

2026-01-31 23:23:09JavaScript

使用 setTimeout 实现延时执行

setTimeout 是 JavaScript 中用于延时执行代码的核心方法。其基本语法如下:

setTimeout(function, delay, [arg1], [arg2], ...);
  • function:需要延时执行的函数。
  • delay:延时时间(毫秒)。
  • arg1, arg2, ...:可选参数,传递给函数的参数。

示例:延时 2 秒后打印消息

setTimeout(() => {
  console.log("Delayed message after 2 seconds");
}, 2000);

清除延时任务

使用 clearTimeout 可以取消尚未执行的延时任务。需保存 setTimeout 返回的 ID:

const timeoutId = setTimeout(() => {
  console.log("This will not run");
}, 1000);

clearTimeout(timeoutId); // 取消任务

结合 Promise 实现异步超时

通过 Promise.race 可以实现超时控制逻辑:

function withTimeout(promise, timeout) {
  return Promise.race([
    promise,
    new Promise((_, reject) => 
      setTimeout(() => reject(new Error("Timeout exceeded")), timeout)
    )
  ]);
}

// 使用示例
withTimeout(fetch('https://api.example.com'), 5000)
  .then(response => console.log(response))
  .catch(error => console.error(error)); // 5秒未响应则报错

递归实现间隔执行(模拟 setInterval)

通过递归调用 setTimeout 可以避免 setInterval 的固定间隔问题:

function repeat(func, interval) {
  function loop() {
    func();
    setTimeout(loop, interval);
  }
  setTimeout(loop, interval);
}

// 使用示例
repeat(() => console.log("Every 1 second"), 1000);

注意事项

  • 浏览器环境的最小延时通常为 4ms(规范要求),但现代浏览器可能不严格遵守。
  • Node.js 中延时精度更高,但实际执行时间受事件循环影响。
  • 避免在循环中创建大量 setTimeout,可能导致内存泄漏。

js实现timeout

标签: jstimeout
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableElem…

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现分页

js实现分页

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

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div c…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval…