js代码中关于async await的滥用 async await的滥用
概念:
返回值: async返回一个promise---这个返回值是默认自发行为
async function name1(params) {console.log(params)
}
let result = name1('lion')
console.log(result) // Promise { undefined }
result.then(res => console.log(res)) // undefined
正题
很多时候不知道该不该加async,导致async,await满天飞
demo:
function timeout(ms) {return new Promise((resolve, reject) => {setTimeout(resolve, ms, 'done');});
}
async function timeout2() {let res = await timeout(3000)console.log('done: 3000')
}
async function timeout3() {let res = await timeout(2000)console.log('done: 2000')
}
现在有个函数想要执行timeout2、timeout3,期待打印顺序肯定是: 'done: 3000' ;'done: 2000'
1、方式:timeout2、timeout3已经是async ,awiat 那么handleTimeout这么写行不行?
function handleTimeout() {timeout2()timeout3()
}
handleTimeout()
// done: 2000
// done: 3000
2、方式:name2 name3已经是async ,awiat 那么handleTimeout这么写行不行?
async function handleTimeout() {timeout2()timeout3()
}
handleTimeout()
// done: 2000
// done: 3000
3、正确的
async function handleTimeout() {await timeout2()await timeout3()
}
handleTimeout()
// done: 3000
// done: 2000
思想: 只看单个方法,别看那么宏观。
解析: 在async函数中,可能会有N个异步处理(promise),我们都用await进行控制时序,当前面的一系列的异步执行完毕后,最终return是一个promise(无论你是否真的在code中return一个promise)
相关文章:
js代码中关于async await的滥用 async await的滥用
概念: 返回值: async返回一个promise---这个返回值是默认自发行为 async function name1(params) {console.log(params) } let result name1(lion) console.log(result) // Promise { undefined } result.then(res > console.log(res)) // undefin…...
基础算法,贪心算法,贪心策略,OJ练习
文章目录 一、概念二、OJ练习2.1 区间选点2.2 区间合并2.3 区间2.4 合并果子2.5 排队接水2.6 货仓选址2.7 防晒2.8 畜栏预定2.9 雷达设备2.10 国王游戏2.11 耍杂技的牛2.12 给树染色2.13 任务2.14 能量石 三、总结 一、概念 贪心是一种在每次决策时采取当前意义下最优策略的算…...
一文讲透亚马逊云三层架构
关于三层架构,我们有很多想说的话: (以下内容以下都在VPC中) cloudfront做CDN加速网关规划S3做静态网站托管APIGateway作为统一网关入口认证/限流Lambda 作为传统后端,并发,底层架构Redis缓存DDB作为持久化…...
只需3步,使用Stable Diffusion无限生成AI数字人视频(附安装包)
基本方法 搞一张照片,搞一段语音,合成照片和语音,同时让照片中的人物动起来,特别是头、眼睛和嘴。 语音合成 语音合成的方法很多,也比较成熟了,大家可以选择自己方便的,直接录音也可以&#…...
RustGUI学习(iced)之小部件(七):如何使用图像image部件来显示图片?
前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第七篇,主要讲述图像Image部件的使用,会结合实例…...
Substrate 入门课第 14 期圆满结束,岗位内推直达知名 Web3 项目!
Substrate,一个完全免费且开源的框架,利用 Rust 语言的强大功能和安全性,为全球开发者提供了一个高效和灵活的开发环境。借助其模块化的设计,即使是新手开发者也能在短短 15 分钟内搭建起定制化的区块链。自 2020 年以来ÿ…...
android进阶-AIDL
参考:Android进阶——AIDL详解_android aidl-CSDN博客 AIDL(Android 接口定义语言),可以使用它定义客户端与服务端进程间通信(IPC)的编程接口,在 Android 中,进程之间无法共享内存&…...
贪心算法-活动选择问题背包问题
目录 活动选择问题 无重叠区间-Leetcode 435 分数背包问题--贪心解法 贪心法 0-1 背包问题 贪心法 贪心算法的局限 Set cover problem 活动选择问题 分析: /* 要在一个会议室举办n个活动 - 每个活动有它们各自的起始和结束时间 - 找出在时间上互不冲突的活动组合,能…...
Web3工具集合 - 00
使用 React 和 Material-UI 构建的 Web3 工具集合 大家好! 我很高兴向大家介绍我最近刚启动了一个项目:Web3 工具集合。 这个项目的目的是一个集成各种 Web3 工具的网站,旨在为开发人员和加密货币爱好者提供便捷的工具和资源。 特点&#…...
分布式与集群的区别
先说区别: 分布式是并联工作的,集群是串联工作的。 分布式中的每一个节点都可以做集群。而集群并不一定就是分布式的。 集群举例:比如新浪网,访问的人很多,他可以做一个集群,前面放一个相应的服务器&…...
学习心得:如何开始学习一款MCU
一、MCU简介 任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量、指令系统等。对于指令系统,虽然形式上看似千差万别,但实际上只是符号的不同,其所代表的含义、所要完成的功能和寻址…...
顺序表的实现(迈入数据结构的大门)(1)
上一节我们认识到了什么是数据结构 这一节我们就来实现第一个数据结构的实现 思考一个问题: 假定一个数组,空间为10,已经使用了5个,向其中插入数据的步骤: 1.插入数据,我们先要求数组长度,其…...
RERCS系统-WDA+BOPF框架实战例子 PART 1-新建List UIBB(列表组件)并分配Feeder Class和Node Element
需求背景: 已有的项目主数据功能,新增一个列表UIBB显示主数据额外的关联数据明细。 1、Fiori页面通过右键-技术帮助打开对应的组件配置; 2、双击对应的组件配置,调整对应的页面新建UIBB; 3、填写对应的UIBB属性字段&a…...
如何从 iPhone 恢复已删除或丢失的联系人?
不小心删除了您的 iPhone 联系人?不用担心。我们将向您展示如何从 iPhone或 iPad恢复已删除或丢失的联系人。当您从 iPhone 中删除联系人时,您可能认为无法将其恢复。但事实是,您可以从 iPhone 或 iPad 恢复已删除的联系人,因为它…...
RISCV 外部GCC 工具链安装@FreeBSD15
在交叉编译的时候,可以使用FreeBSD15默认的工具链:LLVM 也可以使用GCC工具链,GCC可以使用现成pkg包安装,也可以编译安装。 LLVM的特点是高移植性和高效,但学习成本高。GCC的特点是成熟稳定,但优化能力有限…...
全栈开发之路——前端篇(9)插槽、常用api和全局api
全栈开发一条龙——前端篇 第一篇:框架确定、ide设置与项目创建 第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇:setup语法,设置响应式数据。 第四篇:数据绑定、计算属性和watch监视 第五篇 : 组件…...
减瘦误区、雷点、陷阱和挑战怎么应对
在减瘦过程中,很多肥胖人群都容易踩到坑。比如陷入误区,认为只有短期快速的减调方式方法,才值得尝试,而忽视身体健康;或是踩到雷点,轻信强速方剂或方法,结果身体产生了排斥或根本没效用白花钱&a…...
Leetcode—946. 验证栈序列【中等】
2024每日刷题(133) Leetcode—946. 验证栈序列 实现代码 class Solution { public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {int left 0;for(int i 0; i < popped.size(); i) {while(left &…...
Selenium定位方法及代码
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
GitHub搭建免费博客
一、GitHub仓库准备 搭建博客需要准备两个仓库。一个存放博客图床的仓库,另一个存放博客网站的仓库。 1.1、图床创建 新建仓库 第一步: 第二步: 生成Token令牌 点击右上角头像->Settings->下拉,直到左侧到底&#…...
OpenClaw插件开发:为Qwen3.5-4B-Claude添加Excel处理能力
OpenClaw插件开发:为Qwen3.5-4B-Claude添加Excel处理能力 1. 为什么需要开发Excel处理插件 上周我需要处理一批销售数据报表时,突然意识到一个痛点:虽然Qwen3.5-4B-Claude模型在结构化分析上表现优异,但要让它真正帮我完成Excel…...
Zotero插件生态:从翻译到效率提升的进阶配置指南
1. Zotero插件生态全景:从翻译到全流程优化 第一次接触Zotero时,我和大多数人一样,只是把它当作一个简单的文献管理工具。直到某天深夜赶论文,连续手动整理了47篇参考文献后,手指酸痛的我突然意识到:这绝对…...
WRF模式选哪个边界层方案?从YSU到MYNN,手把手教你根据天气场景做选择
WRF模式边界层方案实战指南:从YSU到MYNN的精准选择策略 清晨的山谷雾气弥漫,气象站的监测数据不断跳动——这是WRF模式使用者最熟悉的场景。当你准备模拟一次强对流过程或城市热岛效应时,边界层参数化方案的选择往往成为影响结果精度的关键变…...
开源入门踩坑全实录:从PR被拒到核心贡献者的全周期避坑指南
根据中国开源软件推进联盟2025年发布的《中国开源开发者生态报告》,国内开源开发者规模已突破1200万,但入门1年内就停止贡献的开发者占比高达78.6%。换句话说,每5个尝试入门开源的新手,就有4个会在一年内彻底放弃。 作为从0起步&a…...
OpenClaw+GLM-4.7-Flash:自动化代码审查工具
OpenClawGLM-4.7-Flash:自动化代码审查工具 1. 为什么需要自动化代码审查 作为一个长期与代码打交道的开发者,我深知代码审查的重要性。但现实情况是,团队中的代码审查往往成为瓶颈——要么因为人力不足导致积压,要么因为审查者…...
BepInEx:Unity游戏插件框架的模块化解决方案
BepInEx:Unity游戏插件框架的模块化解决方案 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是一款针对Unity游戏的插件框架,提供模块化的插件管理与…...
对于对话中的文本简化,OpenClaw 的压缩比和可读性如何平衡?
关于文本简化中压缩比与可读性的平衡,这其实是一个在工程实践中经常遇到的核心矛盾。OpenClaw 的处理方式,仔细推敲起来,背后反映的是一种偏向实用主义的权衡思路。 压缩比高,通常意味着文本被大幅度精简,只保留最核心…...
AIGC内容创作流水线:Qwen3-ASR-0.6B赋能语音素材自动化文本化
AIGC内容创作流水线:Qwen3-ASR-0.6B赋能语音素材自动化文本化 你有没有过这样的经历?录完一段精彩的课程讲解、一次深度的访谈对话,或者一段灵光乍现的语音随笔,看着长达几十分钟的音频文件,一想到要把它整理成文字稿…...
Ubuntu 20.04 LTS下Miniconda3安装与配置全攻略(含常见错误解决)
Ubuntu 20.04 LTS下Miniconda3安装与配置全攻略(含常见错误解决) 如果你正在Ubuntu 20.04 LTS上搭建Python开发或数据科学环境,Miniconda3绝对是一个值得考虑的选择。作为Anaconda的精简版,它保留了核心的conda包管理功能&#x…...
BGE-Large-Zh效果对比:BGE-Large-Zh vs m3e-base在中文长尾词匹配上的实测差异
BGE-Large-Zh效果对比:BGE-Large-Zh vs m3e-base在中文长尾词匹配上的实测差异 1. 引言:为什么关注中文长尾词匹配 在日常的中文信息检索和语义匹配场景中,我们经常会遇到一些特殊的长尾词汇。这些词汇可能是不常见的专业术语、新兴的网络用…...
