Node.js setTimeout 定时器
setTimeout 是 Node.js 的全局函数,用于在指定延迟后执行一次回调函数。
基本用法
JavaScript
// 延迟 1000ms 后执行
const timerId = setTimeout(() => {
console.log('延迟执行');
}, 1000);
console.log('立即执行');
// 输出顺序: 立即执行 -> (1秒后) 延迟执行
传递参数
JavaScript
// 向回调函数传递参数
setTimeout((name, age) => {
console.log(`${name} is ${age} years old`);
}, 1000, 'Tom', 25);
// 输出: Tom is 25 years old
取消定时器
JavaScript
const timerId = setTimeout(() => {
console.log('不会执行');
}, 1000);
// 取消定时器
clearTimeout(timerId);
返回值
setTimeout 返回一个 Timeout 对象,可用于取消定时器:
JavaScript
const timer = setTimeout(() => {}, 1000);
console.log(typeof timer); // object
console.log(timer._idleTimeout); // 延迟时间
// 取消定时器
clearTimeout(timer);
延迟时间限制
JavaScript
// 延迟时间范围: 1ms - 2147483647ms (约 24.8 天)
// 超出范围会被设为 1ms
setTimeout(() => {
console.log('1ms 后执行');
}, 9999999999); // 会被修正为 1ms
与 setImmediate 的区别
JavaScript
// setTimeout(fn, 0) 放入 timers 阶段
setTimeout(() => console.log('timeout'), 0);
// setImmediate 放入 check 阶段
setImmediate(() => console.log('immediate'));
// 在 I/O 回调中,immediate 先执行
const fs = require('fs');
fs.readFile('file.txt', () => {
setTimeout(() => console.log('timeout'), 0);
setImmediate(() => console.log('immediate'));
// 输出: immediate -> timeout
});
setTimeout 的最小延迟是 1ms,传入 0 实际上是 1ms。
要点总结
- setTimeout 在指定延迟后执行一次回调
- 返回 Timeout 对象,可用 clearTimeout 取消
- 延迟时间范围 1ms 到约 24.8 天
- 配合事件循环理解执行时机
📝 发现内容有误?点击此处直接编辑