js【详解】Promise
为什么需要使用 Promise ?
传统回调函数的代码层层嵌套,形成回调地狱,难以阅读和维护,为了解决回调地狱的问题,诞生了 Promise
什么是 Promise ?
Promise 是一种异步编程的解决方案,本身是一个构造函数
console.log(Promise); // [Function: Promise]
自带resolve,reject,all 等方法,其原型上还有then、catch等方法。
Promise 的三种状态及其变化
- pending 进行中,不会触发 then 和 catch 回调函数
- resolved / fulfilled 已成功,会触发后续的 then 回调函数
- rejected 已失败,会触发后续的 catch 回调函数

Promise 的状态变化如上图所示,不可逆
-
Promise 最初的状态是 pending
-
pending 状态的 Promise 执行 resolve() 后,状态变为 resolved
Promise.resolve(); // Promise 的状态从 pending 变为 resolved -
resolved 状态的 Promise 会触发后续的 then 函数,
-
若 then 函数内没有报错,则返回一个 resolved 状态的 Promise
Promise.resolve().then(() => {}); // 最终 Promise 的状态为 resolved -
若 then 函数内报错,则返回一个 rejected 状态的 Promise
Promise.resolve().then(() => {throw new Error("then函数出现报错"); }); // 最终 Promise 的状态为 rejected
-
-
pending 状态的 Promise 执行 reject() 后,状态变为 rejected
Promise.reject(); // Promise 的状态从 pending 变为 rejected -
rejected 状态的 Promise 会触发后续的 catch 函数,
-
若 catch 函数内没有报错,则返回一个 resolved 状态的 Promise
Promise.reject().catch(() => {}); // 最终 Promise 的状态为 resolved -
若 catch 函数内报错,则返回一个 rejected 状态的 Promise
Promise.reject().catch(() => {throw new Error("catch函数出现报错"); }); // 最终 Promise 的状态为 rejected
-
Promise 自测题

此时仅创建了 Promise 对象,没有执行 resolve() 或 reject(),所以状态是 pending

- 因 setTimeout 是异步任务,内部代码在打印完 p2 后才执行,所以在打印 p2 时,Promise 还没执行 resolve() ,状态是 pending。
- 打印完 p2 后,setTimeout 内的 resolve() 执行,Promise 的状态变为 resolved



相关文章:
js【详解】Promise
为什么需要使用 Promise ? 传统回调函数的代码层层嵌套,形成回调地狱,难以阅读和维护,为了解决回调地狱的问题,诞生了 Promise 什么是 Promise ? Promise 是一种异步编程的解决方案,本身是一个构…...
八股文-持续更新......
文章目录 SpringSpringBootDubboMQMysqlNettyRedis并发ZookeeperMybatisElasticsearchLinux微服务ZookeeperMybatisElasticsearchLinux...
Redis 大key和热key问题及处理
一、说说什么是Redis、及特点? Redis是一个基于内存存储数据运行并支持持久化、使用key/value形式存储的高性能的nosql数据库,适合用于存储频繁访问,数据量较小的场景下。 特点: 支持数据持久化:可以将内存中的数据保…...
SpringBoot中RestTemplate 发送http请求
SpringBoot中RestTemplate 发送http请求 引入fastjson <!--fastjson--> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.47</version> </dependency>创建配置文件 新建c…...
HTTP有什么缺陷,HTTPS是怎么解决的
缺陷 HTTP是明文的,谁都能看得懂,HTTPS是加了TLS/SSL加密的,这样就不容易被拦截和攻击了。 SSL是TLS的前身,他俩都是加密安全协议。前者大部分浏览器都不支持了,后者现在用的多。 对称加密 通信双方握有加密解密算法…...
OWASP Top 10 网络安全10大漏洞——A02:A02:2021-加密机制失效
10大Web应用程序安全风险 2021年top10中有三个新类别、四个类别的命名和范围变化,以及一些合并。 A02:A02:2021-加密机制失效 上升一个位置,当前top2,以前称为敏感数据泄露,是一种状况而不是根本原因。更新后的类别…...
2024-3-11-C++作业
1>试编程 要求: 提示并输入一个字符串,统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 源代码: #include <iostream>using namespace std;int main() {string s;cout << "请输入字符串:"…...
Spring Boot 实现文件本地以及OSS上传
Spring Boot 实现文件上传 Maven依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version> </dependency>上传到本地 package yang.controller;import java.…...
如何选择一家优秀的APP开发公司?
在移动应用市场的激烈竞争中,选择一家合适的APP开发公司至关重要。然而,仅仅选择了一家公司并不足以确保项目的成功。本文将为您详细介绍选择好APP开发公司后,还应该注意的关键因素,并引入虎克技术公司的以往合作客户的过程中给出…...
【美团笔试】20240309—春招、暑期实习实习笔试
【美团笔试】20240309—春招实习笔试真题 文章目录 【美团笔试】20240309—春招实习笔试真题1. 小美的MT2. 小美的数组询问3. 小美的平衡矩阵(前缀和)4. 小美的区间删除5. 小美的朋友关系参考1. 小美的MT MT 是美团的缩写,因此小美很喜欢这两个字母。现在小美拿到了一个仅由…...
4-LINUX--文件操作命令
一、文件查看命令 1. cat 1.1 查看文件内容,示例如下: 1.2 合并文件,示例如下: 1.3 往文件中写入数据, Ctrld 是结束输入,示例如下: 2. more 当一个文件的内容超过一个屏幕能显示的行数…...
浏览器缓存 四种缓存分类 两种缓存类型
浏览器缓存 本文主要包含以下内容: 什么是浏览器缓存按照缓存位置分类 Service WorkerMemory CacheDisk CachePush Cache 按照缓存类型分类 强制缓存协商缓存 缓存读取规则浏览器行为 什么是浏览器缓存 在正式开始讲解浏览器缓存之前,我们先来回顾一…...
html5cssjs代码 003 50以内的乘法算式
html5&css&js代码 003 50以内的乘法算式 一、代码二、解释 综合应用代码示例。50以内的乘法算式。 一、代码 <!DOCTYPE html> <html lang"en"> <head><title>20以内的乘法</title><meta charset"UTF-8"><…...
安全先行,合规的内外网文件摆渡要重点关注什么?
内外网隔离在政府、军工部门、科研单位等已成为很常见的网络安全建设措施,内外网隔离是一种网络安全措施,用于保护内部网络免受外部网络的攻击和威胁。 内外网隔离的目的在于限制内外网之间的通信和数据交换,但网络隔离后,仍有数据…...
python:牛客NP9---16进制数字大小
文章目录 一、题意描述输入描述:输出描述: 二、代码1.代码的实现2.读入数据 总结 一、题意 描述 计算的世界,除了二进制与十进制,使用最多的就是十六进制了,现在使用input读入一个十六进制的数字,输出它的…...
【惠友小课堂】你玉米几几呀?关爱青少年骨骼健康,助力“神兽”成长
玉 米 几 几 “你玉米几几呀”这是什么梗?怎么突然火了? 起因是一位来自云南的网友有金记录真实生活,在社交媒体平台上发布了一则视频,视频中字幕“玉米六六”实际上是对“一米六六”身高的一种谐音替换,这种创意表…...
【办公类-21-09】三级育婴师 视频转文字docx(等线小五单倍行距),批量改成“宋体小四、1.5倍行距、蓝色字体”
作品展示: 背景需求: 一、视频处理 1、育婴师培训的现场视频 2、下载视频,将视频换成考题名称 二、音频 视频用格式工厂转成MP3音频 3、转文字doc 把音频放入“网易云见外工作台”转换为“文字" 等待5分钟,音频文字会被写…...
Unity DropDown 组件 详解
Unity版本 2022.3.13f1 Dropdown下拉菜单可以快速创建大量选项 一、 Dropwon属性详解 属性:功能:Interactable此组件是否接受输入?请参阅 Interactable。Transition确定控件以何种方式对用户操作进行可视化响应的属性。请参阅过渡选项。Nav…...
Spring AOP常见面试题
目录 一、对于AOP的理解 二、Spring是如何实现AOP的 1、execution表达式 2、annotation 3、基于Spring API,通过xml配置的方式。 4、基于代理实现 三、Spring AOP的实现原理 四、Spring是如何选择使用哪种动态代理 1、Spring Framework 2、Spring Boot 五…...
Java学习笔记14——常量与变量
曾和儿子分享过所谓计算机程序,都是编写代码进行“数据处理和处理数据”而已。任何编程语言编写何种应用,数据都必须以某种方式表示。掌握变量和常量的用法,可以使代码的可维护性、可读性大大提高。 一、常量 常量就是在程序中固定不变的量…...
Neeshck-Z-lmage_LYX_v2代码实例:Streamlit交互界面开发与参数绑定逻辑
Neeshck-Z-lmage_LYX_v2代码实例:Streamlit交互界面开发与参数绑定逻辑 1. 项目核心:一个更聪明的本地绘画工具 如果你用过一些AI绘画工具,可能会遇到几个头疼的问题:想换个画风得重启软件、调参数像开盲盒、电脑配置不够直接卡…...
Ubuntu服务器生产环境部署Pixel Script Temple全记录
Ubuntu服务器生产环境部署Pixel Script Temple全记录 1. 准备工作与环境检查 在开始部署之前,我们需要确保服务器环境满足基本要求。首先确认你的Ubuntu服务器版本为20.04 LTS或22.04 LTS,这两个版本都提供长期支持,适合生产环境使用。 运…...
5个AI Skill实测:影视内容创作全流程自动化
为什么AI助手的能力上限取决于你装了什么Skill养虾必装的5个Skill,影视博主效率翻倍你的小龙虾(OpenClaw/CodeBuddy/Windsurf)装了几个Skill?很多人养虾只用来写代码、查资料,但其实用小龙虾做内容创作、数据分析、批量…...
OpenSC2K终极问题解决指南:20个典型开发和使用问题及快速解决方案
OpenSC2K终极问题解决指南:20个典型开发和使用问题及快速解决方案 【免费下载链接】OpenSC2K OpenSC2K - An Open Source remake of Sim City 2000 by Maxis 项目地址: https://gitcode.com/gh_mirrors/op/OpenSC2K OpenSC2K是一款基于JavaScript和WebGL Can…...
1张因果图,破解90%的决策误区:从相关性到因果性的终极分析框架
你是不是也遇到过这样的困惑:明明做了促销,销量涨了,却算不清到底是促销起了作用,还是商品本身就该爆?看到孩子上了补习班的同学成绩更好,就跟风报班,结果孩子成绩没涨,反而越来越厌…...
OpenClaw日志分析:千问3.5-35B-A3B-FP8任务失败排查方法论
OpenClaw日志分析:千问3.5-35B-A3B-FP8任务失败排查方法论 1. 问题背景与排查思路 上周我在尝试用OpenClaw自动化处理一批产品截图时,遇到了千问3.5-35B-A3B-FP8模型频繁报错的情况。任务看似简单:让AI识别截图中的UI元素并生成改进建议&am…...
同事离职,他在大群里发了一句“感谢一路相伴,江湖再见”,刚发出去,HR就让他撤回,理由是工作群不要发与工作无关的内容。
今天摸鱼的时候,听到一个极其荒诞又极其现实的职场鬼故事。隔壁部门的老李提了离职,今天是last day。这哥们儿可能平时武侠小说看多了,临走前在几百人的公司大群里发了一句:“感谢一路相伴,江湖再见”。结果呢…...
兄弟同心,其利断金:Tomcat、Nginx 与 Node.js 的“三重奏”
写在前面初学后端开发时,我一直困惑一个问题:Tomcat、Nginx、Node.js,它们之间到底是什么关系?刚开始用 Spring Boot,发现里面集成了 Tomcat,启动项目后访问 localhost:8080 就能调接口。那时我以为&#x…...
第6章 黎曼流形优化与几何方法
第6章 黎曼流形优化与几何方法 6.1 黎曼几何基础 6.1.1 复Stiefel流形与单位模流形(Unit-Modulus Manifold)度量 6.1.2 指数映射(Exponential Mapping)与平行移动(Parallel Transport) 6.1.3 测…...
MySQL 运算符详解
MySQL 运算符详解 MySQL 作为一款功能强大的关系型数据库管理系统,其运算符的使用贯穿于 SQL 语句的各个部分。本文将详细介绍 MySQL 中常用的运算符,包括算术运算符、比较运算符、逻辑运算符等,旨在帮助读者全面理解并掌握 MySQL 运算符的使用。 一、算术运算符 算术运算…...
