网站首页 > 博客文章 正文
很多语言中都有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 来指定开启)。
- 上一篇: day10:前端面试题(js)
- 下一篇: 学习ES6- 入门Vue(大量源代码及笔记,带你起飞)
猜你喜欢
- 2025-01-21 JavaScript引擎底层的工作原理
- 2025-01-21 java高级用法之:JNA中的回调
- 2025-01-21 Firefox 42中文版发布 密码管理器改进
- 2025-01-21 vue的两种服务器端渲染方案
- 2025-01-21 JavaScript 神奇语法糖:让你的代码更简洁高效掌握这些简写技巧
- 2025-01-21 JavaScript 基础入门
- 2025-01-21 JavaScript生成器函数:掌握异步编程的强大工具
- 2025-01-21 2021 年 Node.js 开发人员学习路线图
- 2025-01-21 简单的TS入门
- 2025-01-21 Deno 运行时入门教程:Node.js 的替代品
你 发表评论:
欢迎- 367℃用AI Agent治理微服务的复杂性问题|QCon
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 358℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 346℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 342℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)