ES8语法async与await

async和await两种语法结合可以让异步代码像同步代码一样。

一、async函数

  • async函数的返回值为Promise对象
  • promise对象的结果由async函数执行的返回值决定
async function fn() {// 返回一个字符串return '字符串'// 返回的结果不是一个Promise类型的对象,返回的结果就是成功的Promise对象。return;// 抛出错误,返回的结果是一个失败的Promisethrow new Error('出错啦!');// 返回的结果如果是一个Promise对象return new Promise((resolve,reject)=>{// resolve('成功的数据');reject('失败的数据')});
}const result = fn();
console.log(result);// 调用then方法
result.then(value => {console.log(value);
}, reason => {console.warn(reason);
})

二、await

  • await必须写在async函数中
  • await右侧的表达式一般为Promise对象
  • await返回的是Promise成功的值
  • await的Promise失败了,就会抛出异常,需要通过try…catch捕获处理
// 创建promise对象
const p = new Promise((resolve, reject) => {// resolve("用户数据");reject("失败!!");
})
// await要放在async函数中
async function main() {try {let result = await p;console.log(result);} catch (error) {console.log(error);}
}main();

三、async和await结合

// 1.引入js模块
const fs = require('fs');// 读取“.md”文件
function weixue() {return new Promise((resolve, reject) => {fs.readFile('./resourse/为学.md', (err, data) => {// 如果失败if (err) reject(err);// 如果成功resolve(data);});});
}function yougan() {return new Promise((resolve, reject) => {fs.readFile('./resourse/有感.md', (err, data) => {// 如果失败if (err) reject(err);// 如果成功resolve(data);});});
}
function guankan() {return new Promise((resolve, reject) => {fs.readFile('./resourse/观看.md', (err, data) => {// 如果失败if (err) reject(err);// 如果成功resolve(data);});});
}// 2.声明一个async函数
async function main() {// 获取“.md”文件的内容// await返回的结果是成功的值let Weixue = await weixue();let Yougan = await yougan();let Guankan = await guankan();console.log(Weixue.toString());console.log(Yougan.toString());console.log(Guankan.toString());}main();

四、async与await结合封装ajax请求

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>// 发送AJAX请求,返回的结果是一个Promise对象function sendAJAX(url) {return new Promise((resolve, reject) => {// 1.创建对象const x = new XMLHttpRequest();// 2.初始化x.open('GET', url);// 3.发送x.send();// 4.事件绑定x.onreadystatechange = function () {if (x.readyState === 4) {if (x.status >= 200 && x.status < 300) {// 成功resolve(x.response);}else {// 失败reject(x.status);}}}})}// 测试1  then方法的使用// const result = sendAJAX('https://api.apiopen.top/getJoke').then(value => {//     console.log('成功', value);// }, reason => {//     console.log('失败', reason);// });// 测试2  async与await的使用  一般用axios请求async function main() {try {// 发送AJAX请求const result = await sendAJAX('https://api.apiopen.top/getJoke');const tianqi = await sendAJAX('https://v0.yiketianqi.com/life/yearavg');console.log('成功', result,'\n', tianqi);}catch (error) {console.log('失败', error);}}main();</script></body></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/179467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

气体电介质击穿机理及其模拟

摘 要 气体介质在电场作用下发生碰撞电离而导致电极间贯穿性放电的现象。气体介质击穿与很多因素有关&#xff0c;其中主要的影响因素为作用电压、电极形状、气体的性质及状态等。气体介质击穿常见的有直流电压击穿、工频电压击穿、冲击电压击穿、高气压电击穿、高真空电击穿、…

20分钟拥有自己的ChatGPT4,高效低成本,小白必看

准备工作 1、准备一个3.5的账号 2、一张虚拟卡 开始步骤 从ChatGPT第一版发布到现在&#xff0c;还不到一年的时间中&#xff0c;可是它使用的GPT架构已经从3.5版本进化到现在的4.0版本&#xff0c;随之而来的是其能力的极大提升。下面是GPT-4在其官网的介绍中的一句话&…

NetCDF开发( C++) [Window32位+ VS2013]

NetCDF开发( C) [Window32位 VS2013] 记录在windows32位平台开发netcdf数据配置过程。 1、在netcdf网站(netCDF Downloads)下载相关的库&#xff0c;这里需要下载netCDF4.9.2-NC4-32.exe、netcdf-cxx4-4.3.1.zip。 2、安装netCDF4.9.2-NC4-32.exe到D盘根目录。 3、解压netcdf-c…

conda环境下 ERROR: CMake must be installed to build dlib问题解决

1 问题描述 pip install -r requirements.txt 在构建video_retalking项目过程中&#xff0c;使用命令安装依赖包时&#xff0c;出现如下错误&#xff1a; Building wheels for collected packages: face-alignment, dlib, ffmpy, futureBuilding wheel for face-alignment …

与中通支付对接

最近项目接入商户&#xff0c;商户需要同步给中通支付&#xff0c;报错两个异常已解决。 一、json报错 未接入中通SKD之前&#xff0c;不会报错&#xff0c;接入后&#xff0c;json转换异常。 排查后发现&#xff0c;中通的jar包里JSON版本太低&#xff0c;与自身项目的版本冲…

不会写代码也能做自动化?推荐一款自动化测试神器

在软件测试这条道路上&#xff0c;大部分的职业技能发展道路都会是纯业务手工测试→自动化测试→性能测试→安全测试/测试开发。 但是却有着一部分人起初进入软件测试这一行看重的就是软件测试属于IT行业&#xff0c;门槛比较低&#xff0c;不需要代码基础。 这就导致了这一部…

0基础学java-day9

一、房屋出租系统-需求&&界面 1项目需求说明 实现基于文本界面的《房屋出租软件》。 能够实现对房屋信息的添加、修改和删除&#xff08;用数组实现&#xff09;&#xff0c;并能够打印房屋明细表 2 房屋出租系统-界面 2.1 项目界面 - 主菜单 2.2项目界面- 新增房…

Linux C语言 23-守护进程

Linux C语言 23-守护进程 本节关键字&#xff1a;守护进程、daemon 相关C库函数&#xff1a;sigset、signal、fork、setsid、chdir、umask、open、write、close、sleep 什么是守护进程&#xff1f; 守护进程&#xff08;Daemon&#xff09;也被翻译为精灵进程、后台进程&…

Linux编写Shell命令脚本

1.编写Shell脚本 可以将Shell终端解释器当作人与计算机硬件之间的“翻译官”&#xff0c;它作为用户与Linux系统内部的通信媒介&#xff0c;除了能够支持各种变量与参数外&#xff0c;还提供了诸如循环、分支等高级编程语言才有的控制结构特性。要想正确使用Shell中的这些功能…

git的创建以及使用

1、上传本地仓库 首先确定项目根目录中没有.git文件&#xff0c;有的话就删了&#xff0c;没有就下一步。在终端中输入git init命令。注意必须是根目录&#xff01; 将代码存到暂存区 将代码保存到本地仓库 2、创建git仓库 仓库名称和路径&#xff08;name&#xff09;随便写…

vscode 里怎么自动提示 webpack 配置项?

webpack 的配置项非常多&#xff0c;容易忘记&#xff0c;能自动提示很有用&#xff0c;就是在配置文件里面添加下面代码 // 下面这行用于 vscode 中智能化自动提示 webpack 配置项 /** type {import(webpack).Configuration} */

力扣二叉树--第三十二天

前言 关于路径的两道题。掌握递归函数要不要返回值。用到了defer关键字&#xff0c;起到回溯的作用。 内容 一、路经总和 112.路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所…

文本三剑客之sed

一、sed编辑器 ■ sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的—组规则来编辑数据流 ■ sed编辑器可以根据命令来处理数据流中的数据&#xff0c;这些命令要么从命令行中输入&#xff0c;要么存储在一个命令文本文件中 1、sed的工作流程主要…

分享一个适用于 Vue3 的好的组件库,PrimeVue组件。

一、PrimeVue介绍 PrimeVue 是一个基于 Vue.js 的 UI 组件库&#xff0c;专注于提供丰富、灵活、现代的 UI 组件&#xff0c;以帮助开发者构建功能强大的 Web 应用程序。PrimeVue 提供了一系列的组件&#xff0c;涵盖了从基本的表单元素到高级的数据表格和图表等各种组件。 二、…

大模型fine-tune 微调

大模型的 Fine-tune 我们对技术的理解&#xff0c;要比技术本身更加重要。 正如我在《大模型时代的应用创新范式》一文中所说&#xff0c;大模型会成为AI时代的一项基础设施。 作为像水、电一样的基础设施&#xff0c;预训练大模型这样的艰巨任务&#xff0c;只会有少数技术…

测试用例设计全网最强篇(建议收藏)

本篇从多角度带大家从0开始学习怎么写测试用例&#xff0c;七种方法8个案例&#xff08;含用例模板&#xff09;&#xff1b;学习目标&#xff1a;测试用例的基本知识以及黑盒测试用例的设计方法。 前言&#xff1a;总体编写策略&#xff1a; 对于测试用例编写来说&#xff0…

只会在终端使用Python运行代码?这些高级用法了解了解

大部分同学在终端使用Python可能只是简单的执行代码&#xff0c;但其实结合一些Python内置模块或第三方库可以实现更高级且便捷的用法&#xff0c;一起看看吧 插播&#xff0c;更多文字总结指南实用工具科技前沿动态第一时间更新在公粽号【啥都会一点的研究生】 代码Benchmar…

CG向量和矩阵元素的获取

swizzle swizzle可以获取向量分量值&#xff1b;表现形式是点符号和rgba或xyzw rgba一般用作颜色表示 xyzw一般用于坐标表示分量值可以进行组合 例如&#xff1a;fixed4 test(1,2,3,4) 获取分量值&#xff1a;test.r 获取第一个分量值、test.g、test.xy、test.yx 向量维度转换…

Java研学-IO流(一)

一 文件与流—真正存储数据的载体 1 存储关系与类型 文件 – 可以直接操作的数据资源载体 文件夹 – 同时存放一个或多个文件的"容器" 文本文件 – 纯文本:操作的是字符型数据:例如 .java/.txt/.class… 媒体文件 – 既可以包含文本也可以包含其他数据:操作字节…

香港科技大学数据建模(MSc DDM)硕士学位项目(2024年秋季入学)招生宣讲会-武汉专场

时间&#xff1a;2023 年12 月 8 日&#xff08;周五&#xff09; 15:00 地点&#xff1a;华中科技大学大学生活动中心B座303 嘉宾教授&#xff1a;张锐 教授 项目旨在培养科学或工程背景的学员从数据中提取信息的数据建模能力&#xff0c;训练其拥有优秀的解难和逻辑思考与分…