Node.js setInterval 间隔定时器
setInterval 是 Node.js 的全局函数,用于按指定间隔重复执行回调函数。
基本用法
JavaScript
// 每隔 1000ms 执行一次
const intervalId = setInterval(() => {
console.log('重复执行', new Date().toLocaleTimeString());
}, 1000);
console.log('立即执行');
传递参数
JavaScript
// 向回调函数传递参数
let count = 0;
const intervalId = setInterval((name) => {
count++;
console.log(`${name}: 第 ${count} 次执行`);
if (count >= 3) {
clearInterval(intervalId);
}
}, 1000, 'Timer');
取消定时器
JavaScript
const intervalId = setInterval(() => {
console.log('执行中...');
}, 500);
// 3 秒后取消
setTimeout(() => {
clearInterval(intervalId);
console.log('定时器已取消');
}, 3000);
返回值
setInterval 返回一个 Timeout 对象:
JavaScript
const timer = setInterval(() => {}, 1000);
console.log(typeof timer); // object
console.log(timer._idleTimeout); // 间隔时间
// 取消定时器
clearInterval(timer);
实际应用示例
倒计时
JavaScript
let seconds = 10;
const countdown = setInterval(() => {
console.log(`剩余 ${seconds} 秒`);
seconds--;
if (seconds < 0) {
clearInterval(countdown);
console.log('倒计时结束');
}
}, 1000);
定时任务
JavaScript
// 每 5 秒检查一次状态
const checkStatus = setInterval(async () => {
const status = await getStatus();
if (status === 'completed') {
clearInterval(checkStatus);
console.log('任务完成');
}
}, 5000);
注意事项
JavaScript
// 回调执行时间超过间隔时间时,会导致执行延迟
setInterval(() => {
// 这个操作耗时 2 秒
// 实际间隔会变成 2 秒 + 1000ms
heavyOperation();
}, 1000);
// 解决方案:使用递归 setTimeout
function runWithFixedDelay() {
heavyOperation();
setTimeout(runWithFixedDelay, 1000);
}
runWithFixedDelay();
setInterval 不会等待回调执行完成,可能在回调未结束时触发下一次调用。
要点总结
- setInterval 按固定间隔重复执行回调
- 返回 Timeout 对象,用 clearInterval 取消
- 回调执行时间会影响实际间隔
- 需要固定间隔时考虑递归 setTimeout
📝 发现内容有误?点击此处直接编辑