javascript(ES5,ES6)中实现sleep的方法
来源:互联网 发布:Js定义字符串编码 编辑:程序博客网 时间:2024/05/17 04:42
简要介绍:在多线程编程中,sleep的作用是起到挂起的作用,使线程休眠,而js是单线程的,我们如何在js中模拟sleep的效果呢~
序:为什么不能用setTimeout来实现sleep的效果
因为sleep要实现的是同步进程或者说同步程序的挂起,而setTimeout本身是异步的,我们来举个例子:
function test(){ setTimeout(function(){console.log(111)},100); console.log(222);}test()//先输出了222,后输出了111
从运行结果来看,先输出了222,后输出了111,因为setTimeout是异步的,因此这里通过setTimeout并没有实现sleep的效果。
1.循环的方式
function sleep(ms){ var start=Date.now(),expire=start+ms; while(Date.now()<expire); console.log('1111'); return;}
执行sleep(1000)之后,休眠了1000ms之后输出了1111。上述循环的方式缺点很明显,容易造成死循环。
- 通过promise来实现
function sleep(ms){ var temple=new Promise( (resolve)=>{ console.log(111);setTimeout(resolve,ms) }); console.log(222); return temple}sleep(500).then(function(){ //console.log('something')})//先输出了111,后输出222
3.通过async封装
function sleep(ms){ return new Promise((resolve)=>setTimeout(resolve,ms));}async function test(){ var temple=await sleep(1000); console.log(1111) return temple}test();//延迟1000ms输出了1111
2017年12月1日补充: 方法2其实还是异步的,必须有await同步等待,才能完成sleep的效果。定义promise函数主体内还是异步的,实现同步的关键在于await~
阅读全文
0 0
- javascript(ES5,ES6)中实现sleep的方法
- ES5和ES6中对于继承的实现方法
- ES6中新增数组方法与ES5之间的区别
- 浅谈JavaScript、ES5、ES6
- 浅谈JavaScript、ES5、ES6
- 浅谈JavaScript、ES5、ES6
- 浅谈JavaScript、ES5、ES6
- 浅谈JavaScript、ES5、ES6
- es6与es5 中this的区别
- JavaScript原型链以及ES3、ES5、ES6实现继承的不同方式
- ES5 中 JavaScript的继承
- JavaScript ES6与ES5对比
- JavaScript、ES5、ES6有什么
- 将javascript的es6的格式转换为es5 Babel
- ES6转ES5, javascript---第二季之函数的扩展
- ES5, ES6, ES2016, ES.Next: JavaScript 的版本是怎么回事?
- JavaScript、ES5和ES6的介绍和区别
- javascript开发:ES5与ES6的“this”深入分析
- 一句一句读Pytorch
- 应用启动,显示Logo或者广告
- 移动端日期选择组件
- 八小时实现迷你版vuejs四:实现compile和Directive
- 关于laravel5.2从数据库取出的时间戳与本地时间不相同
- javascript(ES5,ES6)中实现sleep的方法
- pycharm快捷键、常用设置、配置管理
- C++学习笔记之enable_shared_from_this
- 树莓派配置文档 config.txt 说明
- Node.js中http 接收get请求、接收post请求、发送get请求、发送post请求
- 机器学习系列之EM算法
- Kotlin学习笔记--函数、函数表达式、默认参数、具名参数
- 【深度学习】Network In Network--在CNN中构建MLP
- Java设计模式--观察者模式