JavaScript 中实现 sleep

栏目: JavaScript · 发布时间: 6年前

内容简介:来自推特上 Windows 故障分析的笑话 图片来源:推上看到的笑话,Windows 故障分析的实现。

JavaScript 中实现 sleep

来自推特上 Windows 故障分析的笑话 图片来源: me.me

推上看到的笑话,Windows 故障分析的实现。

然后想起来 JavaScript 中如何实现这个 sleep() 函数让代码暂停指定时间。

异步版本

借助 Promise 这事很好实现。

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

创建一个 Promise ,等待指定时间后 resolve 掉即可。

但, Promise 是异步的,它要求后续代码要么包含在 then 里面,要么通过 async/await 来调用。

所以使用起来应该像这样子,

function testSleep() {
  console.log("will sleep for 1s");
  sleep(1000).then(() => {
    console.log("will sleep for another 5s");
    sleep(5000).then(() => {
      console.log("waked up");
    });
  });
}
testSleep();

或者这样子:

async function testSleep() {
  console.log("will sleep for 1s");
  await sleep(1000);
  console.log("will sleep for another 5s");
  await sleep(5000);
  console.log("waked up");
}
testSleep();

JavaScript 中实现 sleep

测试 sleep

当然后者会更加优雅些,但本质上都是需要保证后续代码在 Promise 回调中执行。如何有回调之外的代码,则不会被阻断,这便是其缺点。

async function testSleep() {
  console.log("will sleep for 1s");
  await sleep(1000);
  console.log("will sleep for another 5s");
  await sleep(5000);
  console.log("waked up");
}
testSleep();

// :rotating_light:不会按预期那样最后执行,而是立即被执行
console.log("我在等上面的代码执行完...");

JavaScript 中实现 sleep

代码未阻断的情况

同步版本

不借助异步异步代码想阻断代码执行,那其实可以让代码原地跑,通过 while

function syncSleep(time) {
  const start = new Date().getTime();
  while (new Date().getTime() - start < time) {}
}

使用起来就和正常函数没区别了,对周围代码也没有要求必需得在回调什么的:

console.log("start test sync sleep...");
syncSleep(3000);
console.log("sync sleep after 3s");

JavaScript 中实现 sleep

测试同步版本的 sleep

方便是方便,但不建议使用这种方式,毕竟代码在空跑。如果需要这样的场景,你需要考虑是否可以修改下代码或换个设计,异步能满足大部分需求。


以上所述就是小编给大家介绍的《JavaScript 中实现 sleep》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C标准库

C标准库

P. J. Plauger / 卢红星、徐明亮、霍建同 / 人民邮电出版社 / 2009-7 / 79.00元

本书是由世界级C语言专家编写的C标准库经典著作。英文版已经重印十多次,影响了几代程序员。 本书结合C标准的相关部分,精辟地讲述了每一个库函数的使用方法和实现细节,而这正是一个真正的C程序员所必须掌握的。更重要的是,书中给出了实现和测试这些函数的完整源代码,可以让你更深入地学习C语言。不仅如此,本书还讨论了一些即使是最有经验的C程序员通常也不熟悉的知识,比如国际化和独立于区域设置的程序的编写、......一起来看看 《C标准库》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具