当前位置:首页 > JavaScript

js实现timeout

2026-01-31 23:23:09JavaScript

使用 setTimeout 实现延时执行

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

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

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

js实现timeout

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

清除延时任务

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

js实现timeout

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,可能导致内存泄漏。

标签: jstimeout
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

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

js实现计算器

js实现计算器

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

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…