8.实现一个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 1s sleep1(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的。
作者:不想做混子的奋斗远
出处:https://www.cnblogs.com/alwaysrun/p/17179848.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!