js实现sleep延时睡眠函数

文章讨论了JavaScript的单线程特性以及异步处理的重要性。通过示例展示了如何使用Promise配合async/await来封装延迟函数,以及如何使用while循环实现睡眠效果。在主线程和异步环境中,两种方法有不同的应用和性能表现。
摘要由CSDN通过智能技术生成

JavaScript是单线程的,基于宿主环境的其他线程实现异步。

异步带来的好处很多,耗时操作大都放在异步队列中处理。那么在异步下如何去封装一个睡眠函数呢?

promise

使用限制:必须配合async await去使用

function delay(sm = 1000) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve();
    }, sm);
  });
}

(async () => {
  console.time("delay");
  await delay(1000);
  console.timeEnd("delay");
})();

// 控制台输出
// delay: 1.014s

while循环

可以直接在主线程中使用,在主线程慎用。

function sleep(sm) {
  const nowTime = new Date();
  while (Date.now() - nowTime < sm) {
    continue;
  }
}

console.time("sleep");
sleep(2000);
console.timeEnd("sleep");

// 控制台输出
// sleep: 2.000s

也可以在异步中使用

console.time("main");
setTimeout(() => {
  console.time("sleep");
  sleep(2000);
  console.timeEnd("sleep");
}, 0);
console.timeEnd("main");

// 控制台输出
// main: 0.599ms
// sleep: 2.000s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值