前端小技巧: 写一个异步程序示例, 使用任务队列替代promise和async/await等语法糖
异步程序设定场景
1 )场景设定
- 可以使用懒人每做几件事,就要休息一会儿,并且不会影响做事的顺序这种场景来模拟
- 定义单例名称为: lazyMan
- 支持 sleep 和 eat 两个方法
- 支持链式调用
2 ) 调用示例
const lm = new LazyMan('www')
lm.eat('苹果').eat('香蕉').sleep(5).eat('葡萄')
分析与设计
- 上述是基于异步实现一个"懒人做事"的调用过程
- 设计
- 由于有sleep功能,函数不能直接在调用时触发
- 初始化一个列表,把函数注册进去
- 由每个item触发next执行(遇到sleep则异步触发)
代码实现
lazyMan.ts 代码如下
class LazyMan {private name: stringprivate tasks: Function[] = [] // 任务列表constructor(name: string) {this.name = name// 这里必须异步触发const timer = setTimeout(() => {clearTimeout(timer)this.next()})}// 用于执行队列中的下一项任务private next() {const task = this.tasks.shift() // 取出当前 tasks 的第一个任务if (task) task()}// 定义吃的方法eat(food: string) {const task = () => {console.info(`${this.name} eat ${food}`)this.next() // 立刻执行下一个任务}this.tasks.push(task)return this // 链式调用}// 定义睡的方法sleep(seconds: number) {const task = () => {console.info(`${this.name} 开始睡觉`)setTimeout(() => {console.info(`${this.name} 刚刚睡了 ${seconds} s, 正在执行下个任务中 ...`)this.next() // 异步执行}, seconds * 1000)}this.tasks.push(task)return this // 链式调用}
}const lm = new LazyMan('小王')
lm.eat('苹果').eat('香蕉').sleep(1).eat('葡萄').sleep(2).eat('大米');
- 这里使用任务队列, 异步触发next
- 这个示例是替代promise和async/await的一种方法
- 底层是基于 event loop 机制
相关文章:
前端小技巧: 写一个异步程序示例, 使用任务队列替代promise和async/await等语法糖
异步程序设定场景 1 )场景设定 可以使用懒人每做几件事,就要休息一会儿,并且不会影响做事的顺序这种场景来模拟定义单例名称为: lazyMan支持 sleep 和 eat 两个方法支持链式调用 2 ) 调用示例 const lm new LazyMan(www) lm.eat(苹果).…...
【Windows下】Eclipse 尝试 Mapreduce 编程
文章目录 配置环境环境准备连接 Hadoop查看 hadoop 文件 导入 Hadoop 包创建 MapReduce 项目测试 Mapreduce 编程代码注意事项常见报错 配置环境 环境准备 本次实验使用的 Hadoop 为 2.7.7 版本,实验可能会用到的文件 百度网盘链接:https://pan.baidu…...
Python---time库
目录 时间获取 时间格式化 程序计时 time库包含三类函数: 时间获取:time() ctime() gmtime() 时间格式化:strtime() strptime() 程序计时:sleep() perf_counter() 下面逐一介绍&#…...
unity 自由框选截图(两种方法,亲测有效)
提示:文章有错误的地方,还望诸位大神不吝指教! 文章目录 前言一、第一种方法(1)简介GL(2) GL 用法:(3)具体代码 二、第二种方法第一步:第二步第三…...
项目代码规范
editorconfig EditorConfig 是一种用于统一不同编辑器和 IDE 的代码风格的文件格式和插件,帮助开发人员在不同的编辑器和 IDE 中保持一致的代码风格,从而提高代码的可读性和可维护性 # EditorConfig is awesome: https://EditorConfig.org root true[…...
STM32的BKP与RTC简介
芯片的供电引脚 引脚表橙色的是芯片的供电引脚,其中VSS/VDD是芯片内部数字部分的供电,VSSA/VDDA是芯片内部模拟部分的供电,这4组以VDD开头的供电都是系统的主电源,正常使用时,全部都要接3.3V的电源上,VBAT是…...
11.Java安卓程序设计-基于SSM框架的Android平台健康管理系统的设计与实现
摘要 随着人们生活水平的提高和健康意识的增强,健康管理系统在日常生活中扮演着越来越重要的角色。本研究旨在设计并实现一款基于SSM框架的Android平台健康管理系统,为用户提供全面的健康监测和管理服务。 在需求分析阶段,我们明确了系统的…...
jetbrains卡顿(Pycharm等全家桶)终极解决方案,肯定解决!非常肯定!
话越短,越有用,一共四种方案,肯定能解决!!!非常肯定!! 下面四种解决方案,笔者按照实际体验后的结果,按照优先级从高到低排序。你只要按顺序试试就知道了。 m…...
c++的排序算法
一:merge 是 C STL 中的一个算法函数,用于将两个已排序的序列合并成一个有序序列。 template<class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator merge(InputIterator1 first1, InputIterator1 …...
YOLOv5独家原创改进:SPPF自研创新 | SPPF与感知大内核卷积UniRepLK结合,大kernel+非膨胀卷积提升感受野
💡💡💡本文自研创新改进:SPPF与感知大内核卷积UniRepLK结合,大kernel+非膨胀卷积,使SPPF增加大kernel,提升感受野,最终提升检测精度 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),…...
【C/PTA —— 15.结构体2(课外实践)】
C/PTA —— 15.结构体2(课外实践) 7-1 一帮一7-2 考试座位号7-3 新键表输出7-4 可怕的素质7-5 找出同龄者7-6 排队7-7 军训 7-1 一帮一 #include<stdio.h> #include<string.h>struct student {int a;char name[20]; };struct student1 {int …...
艾泊宇产品战略:适应新消费时代,产品战略指南以应对市场挑战和提升盈利
赚钱越来越难,这是许多企业和个人都感到困惑的问题。 然而,艾泊宇产品战略告诉大家,我们不能把这个问题简单地归咎于经济环境或市场竞争,而是需要从更深层次去思考和解决。 本文将从多个角度去剖析这个问题,并探讨在…...
使用autodl服务器,两个3090显卡上运行, Yi-34B-Chat-int4模型,并使用vllm优化加速,显存占用42G,速度23 words/s
1,演示视频地址 https://www.bilibili.com/video/BV1Hu4y1L7BH/ 使用autodl服务器,两个3090显卡上运行, Yi-34B-Chat-int4模型,用vllm优化,增加 --num-gpu 2,速度23 words/s 2,使用3090显卡 和…...
ORACLE数据库实验总集 实验六 SQL 语句应用
一、 实验目的 (1) 掌握数据的插入(INSERT)、 修改(UPDATE) 和删除(DELETE) 操作。 (2) 掌握不同类型的数据查询(SELECT) 操作。 二、…...
[FPGA 学习记录] 快速开发的法宝——IP核
快速开发的法宝——IP核 文章目录 1 IP 核是什么2 为什么要使用 IP 核3 IP 核的存在形式4 IP 核的缺点5 Quartus II 软件下 IP 核的调用6 Altera IP 核的分类 在本小节当中,我们来学习一下 IP 核的相关知识。 IP 核在 FPGA 开发当中应用十分广泛,它被称为…...
每日一题:LeetCode-11.盛水最多的容器
每日一题系列(day 13) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🔎…...
查看电脑cuda版本
1.找到NVODIA控制面板 输入NVIDIA搜索即可 出现NVIDIA控制面板 点击系统信息 2.WINR 输入nvidia-smi 检查了一下,电脑没用过GPU,连驱动都没有 所以,装驱动…… 选版本,下载 下载后双击打开安装 重新输入nvidia-smi 显示如下…...
centos7 docker Mysql8 搭建主从
Mysql8 搭建主从 docker的安装docker-compose的安装安装mysql配置主从在master配置在slave中配置在master中创建同步用户在slave中连接 测试连接测试配置测试数据同步遇到的问题id重复错误执行事务出错,跳过错误my.cnf 不删除多余配置的错误可能用到的命令 docker的…...
CSS中 设置文字下划线 的几种方法
在网页设计和开发中,我们经常需要对文字进行样式设置,包括字体,颜色,大小等,其中,设置文字下划线是一种常见需求 一 、CSS种使用 text-decoration 属性来设置文字的装饰效果,包括下划线。 常用的取值&…...
Docker构建自定义镜像
创建一个docker-demo的文件夹,放入需要构建的文件 主要是配置Dockerfile文件 第一种配置方法 # 指定基础镜像 FROM ubuntu:16.04 # 配置环境变量,JDK的安装目录 ENV JAVA_DIR/usr/local# 拷贝jdk和java项目的包 COPY ./jdk8.tar.gz $JAVA_DIR/ COPY ./docker-demo…...
CMW500实战指南:BLE射频关键指标测试与优化
1. CMW500与BLE测试基础入门 第一次接触CMW500进行BLE射频测试时,我被这个"黑盒子"复杂的按键界面吓到了。但实际用下来发现,只要掌握几个关键操作,就能快速完成BLE设备的核心指标验证。CMW500作为罗德与施瓦茨的旗舰级测试仪&…...
如何用OpenClaw的cron定时任务功能,每天自动发送待办清单
要实现“每天自动发送待办清单”,你需要将 Cron 定时触发器、待办管理 Skills 和消息推送渠道三者打通。这里提供两套最实用的方案,推荐优先使用 CLI 命令方案,它更稳定且易于调试。🚀 方案一:CLI 命令配置ÿ…...
AI金融分析与智能交易系统:TradingAgents-CN全攻略
AI金融分析与智能交易系统:TradingAgents-CN全攻略 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 在数字化投资时代,如何…...
[RK3588-Android12] BQ25703充电IC状态检测与电池图标动态显示的实现
1. 理解BQ25703充电IC与Android电源管理的关系 在RK3588平台上开发Android12系统时,电源管理是个绕不开的话题。BQ25703作为一款高性能充电IC,负责处理设备充电过程中的各种状态转换。我最近在项目中就遇到了一个典型问题:当DC电源插入时&…...
TSM行为识别实战:从UCF101抽帧到模型训练,保姆级避坑指南(附完整代码)
TSM行为识别实战:从UCF101抽帧到模型训练全流程解析 行为识别作为计算机视觉领域的重要研究方向,正在智能监控、人机交互、体育分析等场景中发挥越来越大的作用。本文将手把手带你完成基于TSM(Temporal Shift Module)模型的行为识…...
当 AI 开始制造 AI:递归自我提升时代的人类工程师生存指南
1. 核心命题:人类瓶颈的消失与算力主导的新纪元 1.1 递归自我提升的拐点降临 1.1.1 从"人类设计"到"自我迭代"的范式转移 人工智能发展正经历一场深刻的范式革命,其核心特征是从"人类工程师主导设计"向"AI系统自主迭代进化"的根本…...
告别格式混乱:用pdf2docx实现PDF到Word的无损转换
告别格式混乱:用pdf2docx实现PDF到Word的无损转换 【免费下载链接】pdf2docx Open source Python library converting pdf to docx. 项目地址: https://gitcode.com/gh_mirrors/pd/pdf2docx 你是否曾经遇到过这样的情况:从网上下载了一份重要的PD…...
【2026年6月最新】英语四级历年真题及答案解析PDF电子版(2015-2025年12月)
2026年6月全国大学英语四级考试安排2026年上半年全国大学英语四级考试(CET4)定于6月13日举行。2025年12月四级真题资料包提供2025年12月英语四级考试全套备考资料:完整版考试真题试卷详细答案解析高清听力音频MP3文件PDF电子版文档࿰…...
第二十二讲 XGBoost 回归实战 + SHAP 可视化解读(基于R语言波士顿房价数据集)
1. 从波士顿房价预测开始:为什么选择XGBoost? 每次遇到回归预测问题,我都会先想到XGBoost。这个算法在Kaggle竞赛中屡获佳绩不是没有道理的——它既能处理复杂的非线性关系,又不容易过拟合。最近我用R语言的BostonHousing数据集做…...
MongoDB从零基础搭建到实战
MongoDB从零基础搭建到实战 MongoDB作为当下最流行的开源文档型NoSQL数据库,凭借灵活的文档结构、高扩展性和易用性,成为前后端开发、大数据存储、云原生项目的首选数据库之一。相比传统关系型数据库,它无需严格预定义表结构,适配…...
