- 在 JavaScript 中没有直接的
sleep
方法(在某些编程语言中有),但可以通过以下几种方式来模拟实现类似阻断函数运行的效果- 使用
setTimeout
函数(异步延迟执行)- 基本原理是设置一个定时器,在指定的时间后执行某个函数。在这个等待的过程中,函数的后续代码可以继续执行其他任务。例如:
- 使用
收起
javascript
复制
function delayFunction() {
console.log("函数开始");
setTimeout(() => {
console.log("延迟后的操作");
}, 2000);
console.log("函数继续执行其他部分");
}
delayFunction();
- 在这个例子中,
setTimeout
里面的函数会在 2 秒(2000 毫秒)后执行。当delayFunction
被调用时,它会先打印"函数开始"
,然后设置定时器,接着打印"函数继续执行其他部分"
。2 秒后,setTimeout
中的函数被触发,打印"延迟后的操作"
。 - 使用
async/await
结合Promise
和setTimeout
(异步等待)- 可以创建一个返回
Promise
的函数,在Promise
中使用setTimeout
来模拟延迟。然后在async
函数中使用await
来等待这个Promise
的完成。示例如下:
- 可以创建一个返回
收起
javascript
复制
function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
async function asyncDelayFunction() {
console.log("异步函数开始");
await sleep(3000);
console.log("异步函数延迟后的操作");
}
asyncDelayFunction();
- 在这里,
sleep
函数返回一个Promise
,asyncDelayFunction
是一个async
函数。当执行到await sleep(3000)
时,函数会暂停执行,等待Promise
被resolve
(也就是setTimeout
中的resolve
被调用,这个在 3 秒后发生)。然后再继续执行后面的console.log("异步函数延迟后的操作");
,实现了类似阻断的效果,但是在等待期间,JavaScript 的事件循环仍然可以处理其他异步任务。