js如何简短优雅地实现sleep函数?

时间:?2021-10-14阅读:?14标签:?函数

sleep函数作用是让线程休眠,等到指定时间在重新唤起。那么在js中如何优雅的来实现呢?


方式一:利用循环

function pausecomp(millis){
var date = new Date(),curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis);
}

使用:

pausecomp(1000);
console.log('fly63');//会在1秒后大于fly63

虽然很实现了延展等待,但这是一个非常可怕的解决方案,最好不要再实际项目中使用。因为这是一种死循环堵塞,CPU占用会很高,如果开着占CPU很高的程序(如有一堆flash的页面),很容易被卡死。

注意:语句继续执行就只能用while()空转的方法,判断到了时间就break。不过这个方法也不是真正sleep。虽然JavaScript不直接支持sleep,但是通过setTimeout可以模拟,即使是for循环中的sleep都是可以模拟的。


方案二:使用Promise

1,使用async和await

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function test() {
await sleep(1000);
console.log('fly63');
}
test();

注意,

  1. await只能在以async关键字为前缀的函数中执行,或者在越来越多的环境中在脚本的顶层执行。
  2. await只暂停当前async功能。这意味着它不会阻止脚本其余部分的执行,这在绝大多数情况下都是您想要的。

2,使用then

如果不使用async和await,我们可以通过then来解决:

sleep(1000).then(()=>{
console.log('fly63')
})


方案三:使用回调函数

这估计是项目中最常用的方式了,尤其是之前的老项目,兼容性最好。

function sleep(ms, callback) {
setTimeout(callback, ms)
}
sleep(1000, () => {
console.log('fly63')
})


方案四:使用generator

generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次。

function* sleep(ms){
yield new Promise((resolve,reject)=>{
setTimeout(resolve,ms);
})
}
sleep(1000).next().value.then(()=>{
console.log("fly63")
})


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.pannellisolari.net/article/detial/10735

JavaScript 高阶函数快速入门

把函数以数据的形式去使用,并解锁一些强大的模式。接受和/或返回另外一个函数的函数被称为高阶函数。之所以是高阶,是因为它并非字符串,数字或布尔值,而是从更高层次来操作函数。

js 中的Generator 函数

首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。

Js函数式编程,给你的代码增加一点点函数式编程的特性

给你的代码增加一点点函数式编程的特性,最近我对函数式编程非常感兴趣。这个概念让我着迷:应用数学来增强抽象性和强制纯粹性,以避免副作用,并实现代码的良好可复用性。同时,函数式编程非常复杂。

JS高阶编程技巧--惰性函数

在vue,react等框架大量应用之前,我们需要使用jQuery或者原生js来操作dom写代码,在用原生js进行事件绑定时,我们可以应用DOM2级绑定事件的方法,即:元素.addEventListener(),因为兼容性,还有:

css中calc()函数

css3中函数:用于动态计算长度值。(注意事项:运算符前后都需要保留一个空格,例如:width: calc(100% - 10px));任何长度值都可以使用calc()函数进行计算;

js函数式编程

js函数式编程:是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。

Js中的compose函数和pipe函数

compose函数可以将需要嵌套执行的函数平铺,嵌套执行就是一个函数的返回值将作为另一个函数的参数。我们考虑一个简单的需求:

实现一个JS深拷贝函数

JS深拷贝概念并不新鲜,但是真正要真正理解原理还是有点难度的。这也是JS语言精粹之一吧。因为JS对于对象的赋值使用的是浅拷贝,其中一个实例变量的赋值会影响到所有指向该对象的变量

什么是匿名函数,什么是闭包函数?

在旺球体育在线面试中面试官基本都会问到什么是匿名函数,什么是闭包函数。匿名函数顾名思义就是没有名字的函数,通常我们所写的函数都是这样的:

高阶函数

filter用于对数组进行过滤。 它创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。注意:filter()不会对空数组进行检测,不会改变原始数组

点击更多...

内容以共享,参考,研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!

Baidu