js 实现sleep函数
sleep函数作用是让线程休眠,等到指定时间在重新唤起。
方法一:这种实现方式是利用一个伪死循环阻塞主线程。因为JS是单线程的。所以通过这种方式可以实现真正意义上的sleep()。
function sleep(delay) {var start = (new Date()).getTime();while ((new Date()).getTime() - start < delay) {continue;}
}function test() {console.log('111');sleep(2000);console.log('222');
}test()
方法二:定时器
function sleep1(ms, callback) {setTimeout(callback, ms)}//sleep 1ssleep1(1000, () => {console.log(1000)})
方法三:es6异步处理
const sleep = time => {return new Promise(resolve => setTimeout(resolve,time)) } sleep(1000).then(()=>{ console.log(1) })
方法四:yield后面是一个生成器 generator
function sleepGenerator(time) {yield new Promise(function(resolve,reject){setTimeout(resolve,time);})
}
sleepGenerator(1000).next().value.then(()=>{console.log(1)})
方法五:es7---- async/await是基于Promise的,是进一步的一种优化
function sleep(time) {return new Promise(resolve =>setTimeout(resolve,time)) } async function output() {let out = await sleep(1000); console.log(1); return out;
}
output();
注意点:
async用来申明里面包裹的内容可以进行同步的方式执行,await则是进行执行顺序控制,每次执行一个await,程序都会暂停等待await返回值,然后再执行之后的await。
await后面调用的函数需要返回一个promise,另外这个函数是一个普通的函数即可,而不是generator。
await只能用在async函数之中,用在普通函数中会报错。
await命令后面的 Promise 对象,运行结果可能是 rejected,所以最好把 await 命令放在 try…catch 代码块中。
其实,async / await的用法和co差不多,await和yield都是表示暂停,外面包裹一层async 或者 co来表示里面的代码可以采用同步的方式进行处理。不过async / await里面的await后面跟着的函数不需要额外处理,co是需要将它写成一个generator的。
参考文献:Javascript中的async await
js 实现sleep函数相关推荐
- js 变量、函数提升
js 变量.函数提升 先简单理解下作用域的概念,方便对变量与函数提升的概念的理解 function foo() {var x = 1;if (x) {var x = 2;}console.log(x) ...
- js时间格式化函数,支持Unix时间戳
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 关于js的回调函数的一点看法
关于js的回调函数的一点看法 原文:关于js的回调函数的一点看法 算了一下又有好几个月没写博客了,最近在忙公司android的项目,所以也就很少抽时间来写些东西了.刚闲下来,我就翻了翻之前看的东西.做 ...
- unescape解密 php,php 版 模仿 js ,unescape函数解码,escape函数编码的方法
php 版 模仿 js ,unescape函数解码,escape函数编码的方法 其实跟js 端进行编码和解码相同,而且可以通过php的这个方法直接对js返回的数据进行编码和解码,方法通用. /** * ...
- js调用c语言程序设计,HTML页面,测试JS对C函数的调用简单实例
HTML页面,测试JS对C函数的调用 //http://www.w3schools.com/jsref/event_onclick.asp //document.write('Hello World! ...
- legend---十二、js中的js语句和函数和ready函数的关系是什么
legend---十二.js中的js语句和函数和ready函数的关系是什么 一.总结 一句话总结: 函数和全局变量不必放到ready函数中 语句(调用函数和全局变量)的必须放到ready函数中 1.在 ...
- js 字符串操作函数有哪些
js 字符串操作函数有哪些 一.总结 一句话总结:js字符串函数都是字符串对象的方法,是通过调用字符串方法的方式调用,和java,php里面不一样. 1.字符串替换函数怎么用? 这里的正则表示是加双引 ...
- js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用)...
js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用) 一.总结 2.匿名函数作为参数传递 二.js进阶ajax函数封装 ajax1.js 1 function ajax( ...
- JS OOP -02 深入认识JS中的函数
深入认识JS中的函数: 1.概述,认识函数对象 2.函数对象和其他内部对象的关系 3.将函数作为参数传递 4.传递给函数的隐含参数:arguments 5.函数的apply,call方法和length ...
- c++ _int64转字符串_C语言 仿JS的eval函数 解析字符串
C语言 利用后缀表达式解析字符串(符合c98标准,很容易移植到计算器上) 最近用98标准的C语言写了个解析字符串,类似于JavaScript中的eval函数,感觉挺实用(移植到了计算器上,可以画F(X ...
最新文章
- iOS架构-静态库.a打包之资源文件打包成bundle(4)
- saltstack mysql模块_SaltStack工具中MySQL的模块返回值问题解决
- Ansible之Playbook详解、案例
- docker install on centos 6.x
- swagger的使用方式
- WEB消息提醒实现之二 实现方式-Jquery Ajax长轮询
- 女生在java开发和前端之间不知道选择哪个怎么办?
- SAP ERP与国内ERP系统的对比,为什么建议选SAP
- python stdin和stdout_无法使用Python写入和读取stdin / stdout
- 555定时器回差电压计算公式_555定时器及其应用
- UILabel常见属性
- Face3D学习笔记(5)3DMM示例源码解析【中下】从二维图片的特征点重建三维模型——黄金标准算法
- mysql修改登录用户名和密码_如何修改mysql的用户名和密码
- 闪付卡(QuickPass)隐私泄露原理
- 锐龙r7 PRO 4700G、锐龙r5 PRO 4400G和锐龙r3 4200G 的区别
- 如何设计大自然?#合成美学 #无学科专栏
- android 高德地图sha1,Android调试高德SDK,如何获取SHA1?
- Android 内存优化——常见内存泄露及优化方案
- 为什么要进行结构体内存对齐
- python房子代码,Python---20行代码爬取斗鱼平台房间数据(上)