前端使用javascript如何进行sleep

boyanx2周前技术教程4

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

setTimeout(function(){ console.log("some opertaion after 3 seconds later"); }, 3000);

ES6中我们可以借助 Promise对setTimeout函数进行改良,这样就能实现我们想要的sleep()函数的效果了,下面就是把setTimeout()封装在一个Promise中的示例。

async function sleep() {
 let s = new Date().getTime();
 console.log('start...',s);
 await sleep_inner(1000);
 let e = new Date().getTime()
 console.log('end!',e," diff(ms)",e-s);
}

function sleep_inner(ms) {
 return new Promise(resolve => setTimeout(resolve, ms));
}

sleep();

运行这段代码你会发现代码被阻塞了1秒钟,而且这种写法很优雅,就像其它编程语言里的延迟、等待函数。Promise API使我们避免传入回调函数,我们在实现中还使用了ES6中的箭头(arrow)函数。

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

相关文章

javascript中const/let/var的用法区别及使用场景

给大家建议使用的优先级:const > let > var 首先const声明常量的好处,一是阅读代码的人立刻会意识到不应该修改这个值,二是防止了无意间修改变量值所导致的错误,另外其实js...

苹果这个新的稳定平台适合用户/开发者测试

苹果好低调地就发布了这个平台,还好我们没有错过。从今天起你将有一种新的、更简便的方式去了解,Safari 和其他使用 Webkit 的应用中将有什么特性和完善。Safari Technology Pr...

Google的Dart编程语言即将登陆服务器

几天前的I/O开发者大会上,Google悄然宣布,正在努力工作让其Dart编程语言尽快登陆App Engine。这一实现的基础源于该公司最近推出的管理虚拟机以及该服务的定制运行环境支持。然而,由于定制...

Node.js 24已发布,并将于10月转为LTS长期支持版本

Node.js 24 相较于当前LTS版本 Node.js 22 引入了许多新功能、性能改进和重大变化。1. V8 引擎升级Node.js 24: 升级到 V8 13.6(Node.js 22 使用...

ES6基础——环境构建、任务自动化、服务器搭建

1. 为什么学习 ES6 需要构建环境1. 因为 ES6 一些语法, 在浏览器中是不能直接运行的 。2. 环境构建内容:1. 基础架构 1. 项目需要放置那些目录 。 2. 那些目录放置那...

Next.js 15 来了,全新的编译器、700倍的构建速度提升

Next.js 15 来了,让全栈Web应用开发变得比以往任何时候都更简单高效!全新的编译器、700倍的构建速度提升,创建高性能的全栈Web应用从未如此轻松。让我们一起来探索一下 v15 的最新特性:...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。