js实现等待
使用 setTimeout 实现延迟执行
通过 setTimeout 可以在指定时间后执行回调函数,适用于单次延迟任务。
setTimeout(() => {
console.log("延迟1秒后执行");
}, 1000);
使用 Promise 与 setTimeout 结合
通过 Promise 封装 setTimeout,实现链式调用或 async/await 语法。
function wait(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function demo() {
await wait(2000);
console.log("等待2秒后执行");
}
demo();
使用 setInterval 实现轮询
通过 setInterval 周期性执行任务,需手动清除定时器。
let counter = 0;
const intervalId = setInterval(() => {
console.log(`第${++counter}次执行`);
if (counter >= 3) clearInterval(intervalId);
}, 1000);
使用 requestAnimationFrame 实现动画等待
适用于需要与屏幕刷新率同步的动画场景,性能优于 setTimeout。
function animate() {
console.log("动画帧执行");
requestAnimationFrame(animate);
}
animate();
使用 async/await 等待异步操作完成
适用于需要等待多个异步任务按顺序执行的场景。
async function fetchData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
}
fetchData();
使用 EventEmitter 或自定义事件
通过事件监听机制实现等待特定事件触发后再执行逻辑。
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('ready', () => {
console.log("事件触发后执行");
});
setTimeout(() => emitter.emit('ready'), 1500);
注意事项
setTimeout和setInterval的时间参数为最小值,实际延迟可能因浏览器或系统负载而延长。- 使用
Promise或async/await时需处理可能的异常(通过try/catch)。 - 避免内存泄漏,及时清除无用的定时器或事件监听。







