Promise与async await的作用及应用场景

在Web前端开发中,处理异步操作是非常常见的需求。为了解决这个问题,ES6引入了Promise和后续的async await。本文将介绍Promise和async await的作用,以及在实际开发中的应用场景。

一、Promise的作用及应用场景

Promise是一个表示异步操作最终完成或失败的对象。它可以将回调地狱转化为链式调用,使代码更加整洁和可读。Promise具有以下几个核心方法:

1.1 resolve()
resolve方法用于将Promise对象从未完成状态转为成功状态(即从pending变为fulfilled)。它接受一个参数,该参数就是成功后的结果值。例如:

const promise = new Promise((resolve, reject) => {resolve('成功');
});promise.then((result) => {console.log(result); // 输出:成功
});

1.2 reject()
reject方法用于将Promise对象从未完成状态转为失败状态(即从pending变为rejected)。它接受一个参数,该参数就是失败后的错误信息。例如:

const promise = new Promise((resolve, reject) => {reject('失败');
});promise.catch((error) => {console.error(error); // 输出:失败
});

1.3 then()
then方法用于添加成功后的回调函数。它接受两个参数,第一个参数是成功后的处理函数,第二个参数是失败后的处理函数。例如:

const promise = new Promise((resolve, reject) => {resolve('成功');
});promise.then((result) => {console.log(result); // 输出:成功
}, (error) => {console.error(error);
});

1.4 catch()
catch方法用于添加失败后的回调函数。它与then方法的第二个参数作用相同。例如:

const promise = new Promise((resolve, reject) => {reject('失败');
});promise.catch((error) => {console.error(error); // 输出:失败
});

Promise的应用场景非常广泛,下面以一个简单的异步获取数据的例子来说明:

const fetchData = () => {return new Promise((resolve, reject) => {setTimeout(() => {const data = '这是异步获取的数据';resolve(data);}, 1000);});
};fetchData().then((data) => {console.log(data); // 输出:这是异步获取的数据
});

二、async await的作用及应用场景

async await是ES2017引入的新特性,可以更简洁地处理异步操作。async函数返回一个Promise对象,可以通过await关键字来暂停函数的执行,等待Promise对象的状态变为resolved后继续执行。

2.1 async
async关键字用于定义一个异步函数。异步函数可以包含await关键字,以便在需要等待异步操作结果时暂停函数的执行。例如:

async function fetchData() {return '这是异步获取的数据';
}fetchData().then((data) => {console.log(data); // 输出:这是异步获取的数据
});

2.2 await
await关键字用于暂停异步函数的执行,等待Promise对象的状态变为resolved后继续执行。注意,await只能在异步函数(即用async关键字定义的函数)中使用。例如:

const fetchData = () => {return new Promise((resolve, reject) => {setTimeout(() => {const data = '这是异步获取的数据';resolve(data);}, 1000);});
};async function getData() {const data = await fetchData();console.log(data); // 输出:这是异步获取的数据
}getData();

async await的应用场景通常是在需要按顺序执行多个异步操作的情况下,提高代码的可读性和可维护性。

三、Promise与async await的对比

Promise和async await都是处理异步操作的方式,它们各有优劣。下面是它们的对比:

3.1 可读性
Promise的链式调用相对于回调地狱来说已经很大的提高了可读性,但是对于多个异步操作的情况下,仍然需要嵌套多个then方法,可能会导致代码结构不够清晰。而async await则通过使用async关键字定义异步函数和await关键字暂停函数的执行,使代码更加简洁明了。

3.2 错误处理
Promise使用catch方法来统一处理异步操作中的错误,而async await则可以使用try catch语句来捕获错误并进行处理。这使得错误处理更加灵活,也更容易定位错误。

3.3 兼容性
Promise是ES6中引入的新特性,在较老的浏览器中可能不被完全支持。而async await是ES2017中引入的特性,对于一些较老的浏览器需要使用babel等工具进行转译,以保证兼容性。

综上所述,Promise和async await都是处理异步操作的有效方式。选择合适的方式取决于具体的应用场景和个人习惯。在实际开发中,可以根据项目需求灵活选择使用Promise还是async await来提高开发效率和代码可读性。

更多面试题请点击 web前端高频面试题_在线视频教程-CSDN程序员研修院

最后问候亲爱的朋友们,并邀请你们阅读我的全新著作。

在这里插入图片描述

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

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

相关文章

【程序设计竞赛】C++与Java的细节优化

必须强调下,以下的任意一种优化,都应该是在本身采用的算法没有任何问题情况下的“锦上添花”,而不是“雪中送炭”。 如果下面的说法存在误导,请专业大佬评论指正 读写优化 C读写优化——解除流绑定 在ACM里,经常出现…

Oracle NLSSORT 拼音排序 笔画排序 部首排序

目录 测试数据 --拼音 --笔划 --部首 测试数据 create table test(name varchar2(20)); insert into test values(中国); insert into test values(美国); insert into test values(日本); insert into test values(德国); insert into test values(法国); insert into t…

代码随想录算法训练营day44 || 52. 完全背包问题,518. 零钱兑换II,377. 组合总和 Ⅳ

视频讲解: 带你学透完全背包问题! 和 01背包有什么差别?遍历顺序上有什么讲究?_哔哩哔哩_bilibili 动态规划之完全背包,装满背包有多少种方法?组合与排列有讲究!| LeetCode:518.零钱…

C# 读取excel返回dataset

1、读取函数 /// <summary> /// 读取excel数据 /// </summary> public DataSet ReadExcelFiles(string filePath,List<string> lSheetName) { string strConn String.Format("ProviderMicrosoft.Ace.Ole…

Hive调优——合并小文件

目录 一、小文件产生的原因 二、小文件的危害 三、小文件的解决方案 3.1 小文件的预防 3.1.1 减少Map数量 3.1.2 减少Reduce的数量 3.2 已存在的小文件合并 3.2.1 方式一&#xff1a;insert overwrite (推荐) 3.2.2 方式二&#xff1a;concatenate 3.2.3 方式三&#xff…

寒假学习记录15:Node(网络)

net模块 &#xff08;TCP/IP协议&#xff09; 创建客户端 1.引入net const net require("net"); 2.创建客户端 const socket net.createConnection({host:"连接地址的路径",port:80&#xff08;端口号&#xff09;},()>{console.log("连…

支付交易——重试服务

摘要 为了能在最大限度满足顾客要求的前提下尽可能降低成本&#xff0c;老王在开店的过程中想了很多方法。这充分体现出老王作为一个商人的特质:不放过一个订单&#xff0c;不浪费一分钱。 老王就这样在自己的生意上兢兢业业多年&#xff0c;想着应该不会有什么纰漏。但现实很…

常见单例模式详解

单例模式是23种设计模式中应用最广的模式之一&#xff0c;其定义&#xff1a;确保某一个类只有一个实例&#xff0c;而且自行实实例化并向整个系统通过这个实例。其类图如下&#xff1a; 通俗来说&#xff0c;单例模式就是用于创建那些在软件系统中独一无二的对象。在一个软件系…

来不及哀悼了,接下来上场的是C语言内存函数memcpy,memmove,memset,memcmp

今天又来写一篇C的文章&#xff0c;这里要讲的是C语言中的几个内存函数&#xff0c;主要是讲解功能和用法&#xff0c;望能耐心观看哦。望官方也多多曝光。 目录 memcpy memmove memset memcmp memcpy memcpy 是 C 语言标准库中的一个函数&#xff0c;用于复制内存块的内容…

rtt设备io框架面向对象学习-dac设备

目录 1.dac设备基类2.dac设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 设备io管理层 4.总结5.使用 1.dac设备基类 此层处于设备驱动框架层。也是抽象类。 在/ components / drivers / include / drivers 下的dac.h定义了如下dac设备基类 struct rt_da…

基于Transformer的机器学习模型的主动学习

主动学习和基于Transformer的机器学习模型的结合为有效地训练深度学习模型提供了强有力的工具。通过利用主动学习&#xff0c;数据科学家能够减少训练模型所需的标记数据的数量&#xff0c;同时仍然达到高精度。本文将探讨基于Transformer的机器学习模型如何在主动学习环境中使…

MySQL数据库⑩_视图+MySQL用户管理(增删查改)

目录 1. 视图的概念和规则限制 2. 视图的基本使用 2.1 创建视图 2.2 修改视图影响基表 2.3 修改基表影响视图 2.4 删除视图 3. MySQL用户管理 3.1 用户信息 3.2 创建用户 3.3 修改用户密码 3.4 删除用户 4. 用户权限 4.1 MySQL权限 4.2 给用户授权 4.3 回收权限…

MongoDB聚合: $redact

$redact阶段可以根据文档本身存储的信息&#xff0c;限制输出整个文档或文档中的内容。 语法 { $redact: <expression> }使用 参数可以是任何有效的表达式&#xff0c;只要能被解析为$$DESCEND、$$PRUNE或 $$KEEP系统变量即可。 $$DESCEND $redact返回当前文档级别的…

Windows Server 2019 DHCP服务器搭建

系列文章目录 目录 系列文章目录 文章目录 前言 一、DHCP服务器是什么&#xff1f; 二、配置服务器 1.实验环境搭建 1)实验服务器配置和客户端 2)实验环境 2.服务器配置 ​编辑 文章目录 Windows Server 2003 Web服务器搭建Windows Server 2003 FTP服务器搭建Windows S…

深度优先搜索、广度优先搜索

搜索 搜索就是采用直接遍历整个状态空间的方式寻找答案的一类算法。根据遍历状态空间&#xff08;图&#xff09;方式的不同&#xff0c;可分为&#xff1a; 深度优先搜索&#xff08;DFS&#xff09; 适合树形状态空间&#xff0c;因为递归本身就会产生树的结构&#xff0c;可…

Leetcode 236.二叉树的最近公共祖先

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它自己的…

在微信视频号上发表视频

我们手机打开微信 然后 最下面选择 发现 然后点击 上面的视频号 进入后 点击 右上角头像图标 然后 进入个人管理界面 左下角选择 发表视频 然后 进入一个录制界面 我们左下角 点击这个 从相册选择 打开相册后 选择自己需要的视频 然后 点击右下角下一步 觉得内容没问题 就…

Lua编译与运行

lua会首先把代码编译成中间码然后执行&#xff0c;或许大家都有所困惑&#xff1a;它不是解释性语言吗&#xff1f;其实lua作为解释性语言的意义在于其能在运行过程中完成编译工作&#xff0c;正是dofile、loadfile、require这种函数的存在&#xff0c;lua才能顺理成章地称自己…

VUE基础知识(JAVA后端入门篇)

VUE基础知识&#xff08;JAVA后端入门篇&#xff09; Vue是一套前端框架&#xff0c;免除原生JavaScriptr中的DOM操作&#xff0c;简化书写基于MVVM(Model–View-ViewModel)思想&#xff0c;实现数据的双向绑定&#xff0c;将编程的关注点放在数据上Vue.js - 渐进式 JavaScrip…

【python量化交易】qteasy使用教程02 - 获取和管理金融数据

qteasy教程2 - 获取并管理金融数据 qteasy教程2 - 获取并管理金融数据开始前的准备工作获取基础数据以及价格数据下载交易日历和基础数据查看股票和指数的基础数据下载沪市股票数据从本地获取股价数据生成K线图 数据类型的查找定期下载数据到本地回顾总结 qteasy教程2 - 获取并…