JS实现睡眠| 青训营笔记

144 阅读2分钟

在 JavaScript 中,实现睡眠的概念是通过延迟代码的执行来模拟等待一段时间的效果。由于 JavaScript 是单线程的,它不能像一些其他编程语言那样直接阻塞线程进行睡眠。然而,JavaScript 提供了一些机制来模拟睡眠的效果。 一:好理解的方法:利用一个伪死循环阻塞主线程

 //JS睡眠sleep()
 function sleep(delay) {
   var start = (new Date()).getTime();//可用`+new Date()`代替
   while ((new Date()).getTime() - start < delay) {
     continue;
   }
 }

二:还可以使用setTimeout 函数:通过设置一个定时器来延迟代码的执行时间。 该函数允许设置一个时间间隔,让 JavaScript 在指定的时间后执行代码。通过设置定时器的延迟时间,可以让代码在指定的时间后执行,从而实现睡眠的效果。

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

// 使用示例
console.log('开始执行');
await sleep(2000); // 等待2秒
console.log('2秒后执行');

在上面的代码中,setTimeout 函数用于设置一个定时器,指定了一个回调函数和延迟时间(以毫秒为单位)。在指定的延迟时间过后,回调函数将被执行。

需要注意的是,setTimeout 函数并不会真正阻塞线程或暂停代码的执行。它只是将回调函数添加到事件队列中,并在指定的延迟时间后执行。因此,在调用 setTimeout 后,JavaScript 会继续执行后续的代码,而不会等待定时器的执行。这就是为什么使用定时器函数来实现睡眠效果时,需要在回调函数中执行需要延迟的代码。

三、 使用 async/await:结合 async/await 和 Promise 对象来实现睡眠效果。

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

// 使用示例
async function myFunction() {
  console.log('开始执行');
  await sleep(2000); // 等待2秒
  console.log('2秒后执行');
}

myFunction();

这些方法都是通过设置定时器来暂停代码的执行,从而实现睡眠的效果。需要注意的是,JavaScript 是单线程的,所以这些方法实际上是模拟睡眠,而不是真正的阻塞线程。

四:在yield后面是一个生成器 generator

function sleepGenerator(time) {
	yield new Promise(function(resolve,reject){
		setTimeout(resolve,time);
	 }) 
} 
sleepGenerator(2000).next().value.then(()=>{console.log(3)})