js_基于async/await & Promise的异步编程实现电子时钟(秒表)+调试设计
基于promise的传统版
/* implement of simple clock: */ function clockByPromise() { // return p = new Promise( (resolve) => { // ()=>console.log(Date.now()) console.log(Date()) setTimeout(resolve,1000) } ) p.then(clockByPromise) // return p } clockByPromise()
基于async/await 语法糖的实现
用于调试代码的一些准备代码
/* define(set) a d(debug)function to learn about the program running details more easily! */ d = console.log; function empty(p1 = "", p2 = "", p3 = "") { // empty } // d = empty; inf = console.log; function showSecond() { const d = new Date() return d.getSeconds() }
基于递归调用
async function clock(No = 0) { // defind a count: // No=1 // console.log("hello clock!"); d("-------🌏-------") d(`\n✔️start clock${No} :`,showSecond()) d(`entering await${No}:`,showSecond()) await new Promise( (resolve) => { d(`\t\tawait${No}`) d("\t\tin await block1:first statment:🕐", showSecond()) console.log("\t⏰", showSecond()); setTimeout(resolve, 1000) d("\t\tin await block2:after setTimeOut🕐", showSecond()) }) // d=inf d(`left(out of) await${No} :`,showSecond()) d("\t\t🕐",showSecond(), "left await block just now.") // clock() is a async function,that will be pushed to async task queue,and return as soon as possible. clock(No+1); /* 新的clock()的启动几乎时瞬间完成的(从运行结果可以看出).然后又回到当前主线程执行未完任务 clock是异步代码,在主线程将该任务快速排入到异步消息队列后,立刻回到主线程中执行尚未完成的任务, (这里的await代码中存在一些打印语句,主线程会直接执行打印语句(这些不是耗时逻辑,将在执行await 块之时会执行掉), 而setTimeout()这种被认为时耗时逻辑的代码会被排入异步队列,而不是立刻执行,其余的非耗时逻辑则可以被一并执行掉 由于async/await语法糖的缘故,await 代码块之外的逻辑将需要等await块的逻辑结束后才能得到执行) 在本代码中,就是将inf()内容打印出来,这样,主线程中的任务(栈)就算执行完毕, 此时异步消息队列可以弹入新的任务到主线程中进行处理 */ inf(`🔶ended clock${No}!👬`,showSecond()) }
调用函数:
clock()
基于循环调用
/* 尝试用while改写 */ async function clockCalledByWhile(No = 0) { await new Promise( (resolve) => { console.log("\t⏰", Date()); setTimeout(resolve, 1000) }) } async function testWhile() { while (true) { await clockCalledByWhile() } }
统筹调用函数
/* 统一控制执行所编写的函数 */ // 查看函数的类型信息 console.log(clock); //基于递归: // clock() //基于循环: testWhile()
运行结果预览
基于async的实现我只打印秒的部分,方便观察核心内容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-05-15 android_某些库中的资源文件values.xml大杂烩现象(多种类型的资源值都定义在同一个xml文件中)
2022-05-15 stackOverflow_删除自己stackOverflow上的回答(delete my answer on stackoverflow)