JavaScript中的Promise、Async和Await

Promise 基础

Promise是JavaScript中用于处理异步操作的一个关键概念。它代表了一个尚未完成但预期在将来完成的操作。使用Promise,可以避免所谓的“回调地狱”,即多层嵌套的回调函数,从而使代码更加清晰和易于维护。

代码示例:创建一个基本的Promise

let promise = new Promise(function(resolve, reject) {// 异步操作代码setTimeout(() => {resolve("操作成功");}, 1000);
});promise.then((value) => {console.log(value); // 输出:操作成功
});

Promise 的状态

一个Promise有三种可能的状态:

  1. pending(待定) :初始状态,既不是成功,也不是失败。
  2. fulfilled(已实现) :意味着操作成功完成。
  3. rejected(已拒绝) :意味着操作失败。

代码示例:展示不同状态的Promises

let fulfilledPromise = Promise.resolve('成功');
let rejectedPromise = Promise.reject('失败');fulfilledPromise.then(value => console.log(value)); // 输出:成功
rejectedPromise.catch(error => console.log(error)); // 输出:失败

链式调用和错误处理

Promise的另一个优点是可以通过链式调用.then().catch()方法来处理复杂的异步流程。

代码示例:展示链式调用和错误处理

new Promise((resolve, reject) => {setTimeout(() => resolve(1), 1000);
})
.then(result => {console.log(result); // 输出 1return result * 2;
})
.then(result => {console.log(result); // 输出 2return result * 3;
})
.then(result => {console.log(result); // 输出 6return result * 4;
})
.catch(error => {console.log('捕获到错误:', error);
});

Async 函数

通过在函数声明前加上async关键字,可以将任何函数转换为返回Promise的异步函数。这意味着你可以使用.then().catch()来处理它们的结果。

代码示例:创建一个async函数

async function asyncFunction() {return "异步操作完成";
}asyncFunction().then(value => console.log(value)); // 输出:异步操作完成

Await 关键字

await关键字只能在async函数内部使用。它可以暂停async函数的执行,等待Promise的解决(resolve),然后以Promise的值继续执行函数。

代码示例:在async函数中使用await

async function asyncFunction() {let promise = new Promise((resolve, reject) => {setTimeout(() => resolve("完成"), 1000)});let result = await promise; // 等待,直到promise解决 (resolve)console.log(result); // "完成"
}asyncFunction();

错误处理

async/await中,错误处理可以通过传统的try...catch语句实现,这使得异步代码的错误处理更加直观。

代码示例:使用try...catch处理错误

async function asyncFunction() {try {let response = await fetch('http://example.com');let data = await response.json();// 处理数据} catch (error) {console.log('捕获到错误:', error);}
}asyncFunction();

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

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

相关文章

C语言学习笔记之指针(二)

指针基础知识:C语言学习笔记之指针(一)-CSDN博客 目录 字符指针 代码分析 指针数组 数组指针 函数指针 代码分析(出自《C陷阱和缺陷》) 函数指针数组 指向函数指针数组的指针 回调函数 qsort() 字符指针 一…

新版AndroidStudio使用switch-case语句时出现Constant expression required错误

原因: 在新版的Android Studio中使用JDK17以上版本,会出现switch语句报错"Constant expression required"的问题,这是因为在JDK17中switch语句的条件表达式支持使用枚举类型,而这个特性还没有被支持。 解决方法: ①在gradle.prope…

UE4_动画基础_不同骨骼的动画重定向步骤

学习笔记,仅供参考! 1、导入fbx外部资源,不包含动画,需要使用小白人动画资源。 2、打开Girl_Skeleton。发现骨骼数量不同,要想使用另一个骨骼的动画资源,需要进行不同骨骼的动画重定向。 3、打开小白人骨骼…

Redis 使用小记

Redis提供了五种主要的数据结构,每种都有其特定的用途和一系列操作。以下是每种数据结构及其常见操作的概述: String(字符串): 基本操作: SET, GET, DEL 等。用于存储文本或二进制数据。支持的操作包括设置、获取、删除字符串值&a…

再谈癌症基础与转化研究中的大数据科学

再谈癌症基础与转化研究中的大数据科学 李升伟1 茅 矛1 陈 竺2 (1.特趣生物科技有限公司,广东省深圳市;2.上海交通大学医学院附属 瑞金医院,上海市) 癌症基础与转化研究中的大数据科学涵盖了从数据采集、整合、…

作为研究生应该怎么阅读文献

作为研究生,阅读文献是一个至关重要的学术活动,帮助你建立专业知识基础,了解领域内的最新研究进展,并为自己的研究找到合适的定位。下面是一些有效的文献阅读策略: 1. 确定阅读目标 初步了解:快速浏览文献…

Avalonia中嵌入网页程序(CefNet)运行在银河麒麟系统上

目录 操作系统版本项目目录结构引入Nuget包扩展一个CefNetApplication类改造App.cs文件启动类改造以及cef全局目录设置主窗口代码实现下载 cef 基础环境将cef基础环境放入Program代码里面设置的全局目录下打银河麒麟下的安装包复制安装包去银河麒麟系统上安装并看效果(完美)本文…

007 springboot整合mybatis-plus 增删改查 ajax(修改部分是) jquery 分页

文章目录 MybatisplusConfig.javaReceiveAddressJsonController.javaReceiveAddress.javaReceiveAddressMapper.javaIReceiveAddressService.javaReceiveAddressServiceImpl.javaServerResult.javaServletInitializer.javaSpringbootDemoApplication.javareceive_address.sqlRe…

国密SM2+RSA+AES+MD5加解密,验签流程,工具示例,增强版完善版(包含前后端加解密验签流程)

详见资源包 https://download.csdn.net/download/x948130516/89119461?spm1001.2014.3001.5503 前端引入依赖 使用hutool工具进行签名和验签时,前端需要传入第三个json对象参数,否则会验签失败 前端使用npm install --save sm-crypto引入依赖库 前…

ORACLE数据库版本与表名、字段名、视图名、序列名和主键最大长度的关系

在Oracle 12.1版本及之前(如Oracle 11g),建表表名的最大长度是30个字符。这个长度限制适用于所有标识符,包括表名、字段名、视图名、序列名和主键等。 如果尝试创建包含超过30个字符的表名,系统会报ORA-00972错误&…

mmap函数小实验

mmap函数小实验 文章目的参数 length 不是页大小的整数倍会怎样?研究过程length结论 参数 offset 取不同的值时会怎样?研究过程offset 结论 参考链接 文章目的 本文是为了深入理解mmap的参数length与offset对mmap函数行为的影响,从而更好地理…

反转链表【java】

给定一个链表的头节点head反转链表 方法一:循环 1.定义三个指针: pre指针:刚开始指向空 prenull cur指针:刚开始指向head节点 curhead temp指针:保存cur指针指向节点的下一个节点 2. 不断循环改变相邻两个节点的指…

Spring MVC 中的统一异常处理

文章目录 Spring MVC 中的统一异常处理Spring MVC 中跳转自定义 404 页面的两种常见方式在 web.xml 中指定自定义的 404 页面提供一个匹配 * 的 Controller 请求处理方法 使用 ExceptionHandler 注解使用 ControllerAdvice ExceptionHandler 注解使用示例控制生效的 Controlle…

JavaWeb前端/后端开发规范——接口文档概述及YApi平台的使用

前言: 整理下笔记,打好基础,daydayup!!! 接口文档 什么是接口文档? 目前主流的开发模式为前后端分离式开发,为了方便前后端的对接,就需要使用接口文件进行统一规范。 接口文档记载什么信息? 1&…

第19天:信息打点-小程序应用解包反编译动态调试抓包静态分析源码架构

第十九天 本课意义 1.如何获取到目标小程序信息 2.如何从小程序中提取资产信息 一、Web&备案信息&单位名称中发现小程序 1.国内主流小程序平台 微信 百度 支付宝 抖音头条 2.小程序结构 1.主体结构 小程序包含一个描述整体程序的app和多个描述各自页面的page …

goland2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 Goland 是一款由 JetBrains 公司开发的集成开发环境(IDE),专门用于 Go 语言的开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和管理 Go 语言项目。 功能特点&#x…

Milvus 老友汇|RAG 场景、电商平台、AI 平台……如何用向量数据库构建业务方案?

近日,Milvus 老友汇Arch Meetup 在深圳圆满落幕。本次 Meetup 由 Milvus 社区携手 Shopee 共同举办,同时还邀请到来自 AWS、点石科技的技术专家,分享电商行业、RAG 场景、AI 平台等如何基于向量数据库构建业务方案。 以下是本次 Meetup 的重点…

OSPF---综合实验

1、R4为ISP,其上只配置IP地址;R4与其他所直连设备间均使用公有IP; 2、R3-R5、R6、R7为MGRE环境,R3为中心站点; 3、整个OSPF环境IP基于172.16.0.0/16划分;除了R12有两个环回,其他路由器均有一个环…

Qt 实战(1)Qt 概述

一、Qt概述 1、什么是Qt? Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,也可以开发不带界面的…

HTML 入门

HTML 简介 1. 什么是 HTML? 全称:HyperText Markup Language(超文本标记语言)。 超文本:暂且简单理解为 “超级的文本”,和普通文本比,内容更丰富。 标 记:文本要变成超文本&…