Javascript里的sleep()方法

很多编程语言里都有sleep()delay()等方法,它能让我们的程序不那么着急的去执行下一步操作,而是延迟、等待一段时间。软件开发中经常会遇到需要这样的函数,比如等待几分钟去检查某一事件是否发生。JavaScript里有setTimeout()方法来实现设定一段时间后执行某个任务,但写法很丑陋,需要提供回调函数:

setTimeout(function(){ alert("Hello"); }, 3000);

JavaScript Promise API是新出现了一个API,借助 Promise,我们可以对setTimeout函数进行改良,下面就是把setTimeout()封装成一个返回Promise的sleep()函数。

// https://zeit.co/blog/async-and-await
function sleep (time) {return new Promise((resolve) => setTimeout(resolve, time));
}// 用法
sleep(500).then(() => {// 这里写sleep之后需要去做的事情
})

你会发现,这种写法很优雅,很像其它编程语言里的延迟、等待函数。Promise API使我们避免传入回调函数,我们在实现中还使用了ES6中的箭头(arrow)函数。

这里需要提到的一个问题是,这个sleep()在执行的时候是“block”程序的继续执行的。它不是同步的。如果想让它同步执行,不妨碍执行之后的代码,我们可以使用 async/await 关键字。

(async function() {console.log('Do some thing, ' + new Date());await sleep(3000);console.log('Do other things, ' + new Date());
})();

执行结果:

Do some thing, Mon Feb 23 2015 21:52:11 GMT+0800 (CST)
Do other things, Mon Feb 23 2015 21:52:14 GMT+0800 (CST)

你会发现,这一次,sleep()并没有阻碍第二个console的执行。

 async/await 是ES7中的语法,目前还是处于试验阶段。那现在想用这个 async/await 特性怎么办?可以尝试 google 的一个 JavaScript 预编译器 traceur,可以将高版本的 JavaScript 编译为 ES5 代码,已经实验性的支持了 async/await (需要使用 –experimental 来指定开启)。

Javascript里的sleep()方法相关推荐

  1. JavaScript里的循环方法:forEach,for-in,for-of

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript诞生已经有20多年了,我们一直使用的用来循环一个数组的方法是这样的: for (var index = 0 ...

  2. javascript调用Flash里对象的方法(函数)搞了五个小时。

    搞了几个小时后,才发现,之前走的路是错的. 今天在Firefox浏览器上测试一个javascript调用Flash中的一个对象的方法时遇到问题了, 一搞就整整搞了一个下午. 我记得之前我用Flash8 ...

  3. Angularjs $scope 里面的$apply 方法 和 $watch 方法

    Angularjs $scope 里面的$apply 方法 和 $watch 方法 学习要点: 1. Angularjs $scope 里面的$apply 方法 2. Angularjs $scope ...

  4. 在js中加html_在HTML文档中嵌入JavaScript的四种方法

    在HTML里嵌入JavaScript 在HTML文档里嵌入客户端JavaScript代码有4中方法: 1.内嵌,放置在标签之间  (少): 2.放置在有 3.放置自HTML事件处理程序中,该事件处理程 ...

  5. javascript笔记:深入分析javascript里对象的创建(上)续篇

    今天回来一看我的博客居然有这么多人推荐真是开心极了,看来大家对我的研究有了认可,写博客的动力越来越大了,而且我发现写javascript在博客园里比较受欢迎,写java的受众似乎少多了,可能博客园里j ...

  6. JavaScript 里,$ 代表什么?/JQuery是什么语言?/html中用link标签引入css时的中 rel=stylesheet属性?/EL表达式是什么?...

    JavaScript 里,$ 代表什么? 比如说我写一个mouseover事件: $(document).ready(function(){ $("p").mouseover(fu ...

  7. javascript里的面向对象

    2019独角兽企业重金招聘Python工程师标准>>> 前言: javascript 项目中原生态的语法用得比较少了,都是基于jQuery开发,但在移动项目中还是比较麻烦的.想整理个 ...

  8. javascript王者归来--属性和方法的类型

    JavaScript里,对象的属性和方法支持4种不同的类型,第一种类型就是前面所说的私有类型,它的特点 是对外界完全不具备访问性,要访问它们,只有通过特定的getter和setter.第二种类型是动态 ...

  9. java 动态字符串_Java动态编译执行一串字符串,类似于Javascript里的eval函数

    Javascript里的eval函数能动态执行一串js脚本. 那Java里怎么做到呢. 有两种方法: 一种是使用可以执行js脚本的Java类 ScriptEngineManagerpublic sta ...

最新文章

  1. 大数据环境下该如何优雅地设计数据分层
  2. 其他算法-PCA主成分分析
  3. redis缓存失效时间设为多少_java操作Redis缓存设置过期时间的方法
  4. python可以干什么工作-Python学完工作不好找?看看数据分析可视化都可以做什么...
  5. Luogu P1091 合唱队形
  6. Python基础教程---读书笔记四
  7. 《windows程序设计》第二章学习心得
  8. 还有多少人不会用K8s?.NET高级高薪岗,开始要求了!
  9. 结构化分析和面向对象分析的区别 例子_管理游戏测评例子
  10. 如何计算给定一个unigram语言模型_CS224n笔记[5]:语言模型(LM)和循环神经网络(RNNs)...
  11. Android 获取唯一机器码的代码
  12. 苹果8官方主板价格_iPhone8用户哭了!苹果官方曝出iPhone8主板问题,但售价依然坚...
  13. 6python项目 体脂率计算优化2
  14. 【实习日报】2019年3月 前端开发实习工作日报汇总
  15. php生成各种验证码
  16. 虾神的csdn技术博客
  17. ctex中dvi格式_LaTex使用过程中的各种类型文件说明
  18. 关于鸿蒙系统传统文化的作文,【热门】传统文化作文汇编6篇
  19. CSS秘密花园: 沿着路径的动画
  20. 移动WEB - 自我总结

热门文章

  1. 闲来无事,就把lnmp的php升级到php-5.2.17最新稳定版本
  2. 自己动手架设linux下Web服务器(图)1
  3. Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别
  4. Linux: 系统结构详解
  5. 实现动态验证码的思路
  6. iOS7应用开发5、视图控制器View Controller及其生命周期
  7. 自适应网页设计(Responsive Web Design)响应式设计
  8. 绕过图片防盗链的方法
  9. 使用@Embed嵌入元素
  10. Shell编程之变量