js实现timeout
使用 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,可能导致内存泄漏。







