async函数和await函数
一、async函数
async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。
因此对async函数可以直接then,返回值就是then方法传入的函数。
// async基础语法
async function fun0(){console.log(1);return 1;
}
fun0().then(val=>{console.log(val) // 1,1
})async function fun1(){console.log('Promise');return new Promise(function(resolve,reject){resolve('Promise')})
}
fun1().then(val => {console.log(val); // Promise Promise
}
//声明一个async函数
async function main() {console.log('async function');//情况1:返回非promise对象数据return 'hahaha';//情况2:返回是promise对象数据/* return new Promise((resolve, reject) => {// resolve('ok');reject('error');}) *///情况3:抛出异常// throw new Error('出错啦!!!');
}
let result = main().then(value => {console.log(value);
});
console.log(result);
二、await表达式
await 也是一个修饰符,只能放在async定义的函数内。可以理解为等待。
await 修饰的如果是Promise对象,可以获取Promise中返回的内容(resolve或reject的参数),且取到值后语
句才会往下执行;如果不是Promise对象:把这个非promise的东西当做await表达式的结果。
注意事项
- await必须写在async函数中,但是async函数中可以没有await
- 如果await的promise失败了,就会抛出异常,需要通过try…catch捕获处理
async function fun(){let a = await 1;let b = await new Promise((resolve,reject)=>{setTimeout(function(){resolve('setTimeout')},3000)})let c = await function(){return 'function'}()console.log(a,b,c)
}
fun(); // 3秒后输出: 1 "setTimeout" "function"
function log(time){setTimeout(function(){console.log(time);return 1;},time)
}
async function fun(){let a = await log(1000);let b = await log(3000);let c = log(2000);console.log(a);console.log(1)
}
fun();
// 立即输出 undefined 1
// 1秒后输出 1000
// 2秒后输出 2000
// 3秒后输出 3000
async function main() {//1、如果await右侧为非promise类型数据var rs = await 10;var rs = await 1 + 1;var rs = await "非常6+7";//2、如果await右侧为promise成功类型数据var rs = await new Promise((resolve, reject) => {resolve('success');})//3、如果await右侧为promise失败类型数据,需要借助于try...catch捕获try {var rs = await new Promise((resolve, reject) => {reject('error');})} catch (e) {console.log(e);}
}
main();
// 使用async/await获取成功的结果// 定义一个异步函数,3秒后才能获取到值(类似操作数据库)
function getSomeThing(){return new Promise((resolve,reject)=>{setTimeout(()=>{resolve('获取成功')},3000)})
}async function test(){let a = await getSomeThing();console.log(a)
}
test(); // 3秒后输出:获取成功
案例:async结合await读取文件内容
//1、导包
const fs = require('fs');
const {promisify} = require('util');
//2、将fs.readFile转化成promise风格的函数
const myreadfile = promisify(fs.readFile);
//3、声明async函数
async function main(){try{//4、读取文件let one = await myreadfile('./resource/4.html');let two = await myreadfile('./resource/2.html');let three = await myreadfile('./resource/3.html');//5、拼接读取文件内容console.log(one + two + three);}catch(e){console.log(e);}
}
//6、调用main函数
main();
相关文章:
async函数和await函数
一、async函数 async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。 因此对async函数可以直接then,返回值就是then方法传入的函数。 // async基础语法 async function fun0(){console.log(1);return 1; } fun0()…...
Redis面试题深度解析
1、我看你做的项目中,都用到了redis,你在最近的项目中哪些场景使用了redis呢? 2、缓存穿透 布隆过滤器的误判现象 Redisson和Guava都对布隆过滤器进行了实现 3、缓存击穿 互斥锁,就是一个线程来修改,并占据了锁,另外其…...
Ubuntu 22.04 .NET8 程序 环境安装和运行
前言 我们需要将.NET8编写的console控制台程序,部署在Ubuntu服务器上运行。 安装.NET运行时 1.增加微软包安装源 wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages…...
MetaRTC-ffmpeg arm移植
touch cmake_arm.sh 添加 rm -rf build mkdir build cd build ARCHaarch64.cmake cmake -DCMAKE_BUILD_TYPERelease -DCMAKE_TOOLCHAIN_FILE../$ARCH .. maketouch cmake_arm.sh 添加 SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_C_COMPILER /home/yqw/MetaRTC/BC/stbgcc-6.3-1…...
【乐吾乐3D可视化组态编辑器】模型类型与属性
编辑器地址:3D可视化组态 - 乐吾乐Le5le 本章主要为您介绍模型的属性功能。 一个模型至少会包含一个节点(Node),从节点类型上可以分为转换节点(TransformNode)、网格(Mesh)、实例网…...
PyQt下拉框QComboBox点击下拉时即更新下拉数据
在 PyQt 中,QComboBox 控件本身并没有直接的事件或信号来指示下拉列表何时被打开(即用户点击了下拉箭头)。但是,你可以通过其他方式间接地实现这个功能,比如通过重写 QComboBox 的某些方法或者在用户与 QComboBox 交互…...
网上有哪些正规的兼职副业赚钱平台?分享10类正规的网上兼职赚钱平台,让你在家也能赚钱~
在如今的快节奏社会中,越来越多的人开始寻求兼职副业来增加收入。而随着互联网的普及,网上赚钱平台成为了许多人选择的方式之一。然而,面对众多的网上赚钱平台,我们要如何辨别哪些是正规可靠的呢?在本文中,…...
Spring:JWT
文章目录 一、介绍 一、介绍 JWT(JSON Web Token)是一种开放标准(RFC 7519)的方法,用于在双方之间安全地传输信息。这些信息可以是验证、授权、信息交换等。JWT 通常被用于在客户端和服务器之间传递用户信息ÿ…...
Python的selenium爬取
1.selenium 1.1.前言 使用python的requests模块还是存在很大的局限性,例如:只发一次请求;针对ajax动态加载的网页则无法获取数据等等问题。特此,本章节将通过selenium模拟浏览器来完成更高级的爬虫抓取任务。 1.2.什么是seleniu…...
Linux--进程间通信(1)(匿名管道)
目录 1.了解进程通信 1.1进程为什么要通信 1.2 进程如何通信 1.3进程间通信的方式 2.管道 2.1管道的初步理解 2.2站在文件描述符的角度-进一步理解管道 2.3 管道的系统调用接口(匿名管道) 2.3.1介绍接口函数: 2.3.2编写一个管道的代…...
Hive环境搭建
1 安装Hive 下载文件 # wget -P /opt/ https://mirrors.huaweicloud.com/apache/hive/hive-2.3.8/apache-hive-2.3.8-bin.tar.gz 解压缩 # tar -zxvf /opt/apache-hive-2.3.8-bin.tar.gz -C /opt/ 修改hive文件夹名字 # mv /opt/apache-hive-2.3.8-bin /opt/hive 配置环境变量 …...
网络编程基础(四)
目录 前言 二、多点通信 2.1 单播 2.2 广播 2.2.1 广播得发送端实现--》类似与UDP的客户端 2.3 组播 2.3.1 组播发送端流程--》类似于UDP的客户端流程 2.3.2 组播的接收端流程---》类似于UDP的服务器端流程 前言 多点通信 一、套接字选项得获取和设置 int getsockopt(int…...
将C++ cv:mat 通过JNI 转换为jbtyearray,传到android端
cv::Mat result ; //此处为C获取到的cv::mat结果对象// 编码为JPEG格式std::vector<uchar> buf;cv::imencode(".jpg", result, buf);// 创建一个新的jbyteArray并设置其大小jbyteArray array env->NewByteArray(buf.size());if (array NULL) {// 处理内存…...
WannaCry勒索软件(CVE-2017-0144)
WannaCry 永恒之蓝 在2017年5月,WannaCry勒索软件爆发了一场全球性的网络安全危机,迅速感染了超过200,000台计算机,波及150多个国家。从医疗保健系统到政府机构,无数组织面临数据被加密和赎金要求的双重威胁。本文将提供关于Wann…...
JavaScript(ES5) 入门
01-简介 1)JavaScript 发展史 [1] 1995年,navigator(导航者),netscape(网景);用户体验性特别好 [2] 表单验证难题,表单验证都是在后台处理.当时处在网速特别慢的时代,发送一个请求,接收响应 需要5分钟左右的时候提高表单验证的速度,想开发一种语言在前端进行表单验证. [3] 1995…...
趣店集团golang一面要个20K,Channel什么情况下会出现死锁,有遇到过吗?
结束后面试官加了VX,并询问方便二面的时间,一直还没回复,拖着拖着给忘啦... 面试题 1、自我介绍 2、你在团队里头负责哪一块,这个物流开放平台流量多大 3、为什么今年3月份被从物流开放团队转到了finance财务部门,感…...
智能化乙级资质延期,行业标准的坚守
智能化乙级资质延期:行业标准的坚守 一、引言 智能化乙级资质是企业在智能化工程设计与施工领域的重要认证,它代表了企业的技术实力和专业水平。为确保企业能够持续满足行业标准,保持竞争力,智能化乙级资质的延期管理显得尤为重要…...
d20(184-190)-勇敢开始Java,咖啡拯救人生
目录 网络通信 网络通信三要素(IP地址,端口号,协议 IP地址 InetAddress 端口号 协议 传输层的两个通信协议 UDP通信 java.net.Datagramsocket类 客户端 服务端 UDP通信多收多发 客户端 服务端 TCP通信 java.net.Socket类 客…...
Python 登录表单处理
分析: 处理登录表单以便爬⾍能够抓取需要认证的⽹⻚数据,通常需要模拟登录过程。这可以通过发送带有⽤⼾凭证的POST请求到登录表单的URL来实现。为了保持登录状态,需要处理和保存会话中的 cookies。Python的 requests 库可以⽅便地处理这些任…...
2024.05.27学习记录
1、面经复习: 实际工作经验章节 2、代码随想录刷题:动态规划剩下部分和单调栈 3、rosebush 组件库完成Input 和 AutoComplete部分内容...
从零搭建像素剧本工作站:Pixel Script Temple镜像免配置快速上手指南
从零搭建像素剧本工作站:Pixel Script Temple镜像免配置快速上手指南 1. 认识像素剧本圣殿 Pixel Script Temple是一款专为剧本创作者设计的AI辅助工具,它基于强大的Qwen2.5-14B-Instruct模型深度优化,特别适合需要频繁创作剧本、小说或叙事…...
Spring_couplet_generation 构建RESTful API最佳实践
Spring_couplet_generation 构建RESTful API最佳实践 最近在做一个挺有意思的小项目,想把一个春联生成模型包装成服务,方便其他应用调用。这让我重新思考了如何把一个AI模型能力,通过API的方式,既规范又稳定地提供出去。相信不少…...
uniapp学习9,同时兼容h5和微信小程序的百度地图组件
H5端微信小程序端:manifest.json配置 "mp-weixin" : {"appid" : "你的微信小程序appid","setting" : {"urlCheck" : false},"usingComponents" : true,"permission": {"scope.userLoca…...
缺失值处理失效、类型推断崩塌、内存暴增…Polars 2.0清洗故障全解析,深度解读Arrow底层Schema约束机制
第一章:Polars 2.0数据清洗的核心挑战与演进脉络随着数据规模持续膨胀与实时分析需求激增,传统基于 Pandas 的数据清洗范式在内存效率、并行粒度和类型安全方面日益显露瓶颈。Polars 2.0 的发布并非简单功能叠加,而是以 Arrow-native 执行引擎…...
嵌入式开发中的静态代码分析工具实战指南
1. 嵌入式代码静态分析工具概述作为一名嵌入式开发工程师,我深知在资源受限的MCU环境中,代码质量直接决定了产品的稳定性和可靠性。传统的C语言编译器虽然能发现语法错误,但对代码设计缺陷和潜在风险往往无能为力。这正是静态代码分析工具的价…...
Hunyuan-MT-7B入门必看:从环境配置到Chainlit前端调用完整实操手册
Hunyuan-MT-7B入门必看:从环境配置到Chainlit前端调用完整实操手册 混元翻译大模型Hunyuan-MT-7B在WMT25国际翻译大赛中表现惊艳,31种语言中30种获得第一名,堪称同尺寸模型中的翻译王者。本文将手把手带你从零开始,完成环境配置、…...
告别盲调!用STM32的编码器模式+定时器中断,精准测量电机转速(附速度计算源码)
STM32编码器模式实战:从脉冲计数到精准转速测量的全链路解析 在电机控制系统中,转速测量就像给盲人配上一副眼镜——它让抽象的旋转运动变得可视化、可量化。许多工程师在完成电机基础驱动后常陷入一个尴尬境地:电机确实转起来了,…...
30分钟搞定OpenClaw:Qwen3-4B镜像云端体验与技能测试
30分钟搞定OpenClaw:Qwen3-4B镜像云端体验与技能测试 1. 为什么选择云端体验OpenClaw 上周我在本地尝试部署OpenClaw时,被各种环境依赖和配置问题折磨得够呛。正当我准备放弃时,偶然发现星图平台提供了预置OpenClaw和Qwen3-4B模型的完整镜像…...
Phi-4-mini-reasoning开源模型教育价值:高校AI课程实验设计与评估标准
Phi-4-mini-reasoning开源模型教育价值:高校AI课程实验设计与评估标准 1. 引言:AI教育的新工具 在人工智能教育领域,如何让学生既能理解前沿技术原理,又能获得实际动手能力,一直是教学设计的难点。Phi-4-mini-reason…...
NASM高级特性详解:条件汇编、上下文栈和宏重载
NASM高级特性详解:条件汇编、上下文栈和宏重载 【免费下载链接】nasm A cross-platform x86 assembler with an Intel-like syntax 项目地址: https://gitcode.com/gh_mirrors/na/nasm NASM(Netwide Assembler)是一款跨平台的x86汇编器…...
