当前位置: 首页 > news >正文

js【详解】Promise

为什么需要使用 Promise ?

传统回调函数的代码层层嵌套,形成回调地狱,难以阅读和维护,为了解决回调地狱的问题,诞生了 Promise

什么是 Promise ?

Promise 是一种异步编程的解决方案,本身是一个构造函数

console.log(Promise); // [Function: Promise]

自带resolve,reject,all 等方法,其原型上还有then、catch等方法。

Promise 的三种状态及其变化

  1. pending 进行中,不会触发 then 和 catch 回调函数
  2. resolved / fulfilled 已成功,会触发后续的 then 回调函数
  3. 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是明文的&#xff0c;谁都能看得懂&#xff0c;HTTPS是加了TLS/SSL加密的&#xff0c;这样就不容易被拦截和攻击了。 SSL是TLS的前身&#xff0c;他俩都是加密安全协议。前者大部分浏览器都不支持了&#xff0c;后者现在用的多。 对称加密 通信双方握有加密解密算法…...

OWASP Top 10 网络安全10大漏洞——A02:A02:2021-加密机制失效

10大Web应用程序安全风险 2021年top10中有三个新类别、四个类别的命名和范围变化&#xff0c;以及一些合并。 A02&#xff1a;A02:2021-加密机制失效 上升一个位置&#xff0c;当前top2&#xff0c;以前称为敏感数据泄露&#xff0c;是一种状况而不是根本原因。更新后的类别…...

2024-3-11-C++作业

1>试编程 要求&#xff1a; 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 源代码: #include <iostream>using namespace std;int main() {string s;cout << "请输入字符串&#xff1a;"…...

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开发公司?

在移动应用市场的激烈竞争中&#xff0c;选择一家合适的APP开发公司至关重要。然而&#xff0c;仅仅选择了一家公司并不足以确保项目的成功。本文将为您详细介绍选择好APP开发公司后&#xff0c;还应该注意的关键因素&#xff0c;并引入虎克技术公司的以往合作客户的过程中给出…...

【美团笔试】20240309—春招、暑期实习实习笔试

【美团笔试】20240309—春招实习笔试真题 文章目录 【美团笔试】20240309—春招实习笔试真题1. 小美的MT2. 小美的数组询问3. 小美的平衡矩阵(前缀和)4. 小美的区间删除5. 小美的朋友关系参考1. 小美的MT MT 是美团的缩写,因此小美很喜欢这两个字母。现在小美拿到了一个仅由…...

4-LINUX--文件操作命令

一、文件查看命令 1. cat 1.1 查看文件内容&#xff0c;示例如下&#xff1a; 1.2 合并文件&#xff0c;示例如下&#xff1a; 1.3 往文件中写入数据&#xff0c; Ctrld 是结束输入&#xff0c;示例如下&#xff1a; 2. more 当一个文件的内容超过一个屏幕能显示的行数…...

浏览器缓存 四种缓存分类 两种缓存类型

浏览器缓存 本文主要包含以下内容&#xff1a; 什么是浏览器缓存按照缓存位置分类 Service WorkerMemory CacheDisk CachePush Cache 按照缓存类型分类 强制缓存协商缓存 缓存读取规则浏览器行为 什么是浏览器缓存 在正式开始讲解浏览器缓存之前&#xff0c;我们先来回顾一…...

html5cssjs代码 003 50以内的乘法算式

html5&css&js代码 003 50以内的乘法算式 一、代码二、解释 综合应用代码示例。50以内的乘法算式。 一、代码 <!DOCTYPE html> <html lang"en"> <head><title>20以内的乘法</title><meta charset"UTF-8"><…...

安全先行,合规的内外网文件摆渡要重点关注什么?

内外网隔离在政府、军工部门、科研单位等已成为很常见的网络安全建设措施&#xff0c;内外网隔离是一种网络安全措施&#xff0c;用于保护内部网络免受外部网络的攻击和威胁。 内外网隔离的目的在于限制内外网之间的通信和数据交换&#xff0c;但网络隔离后&#xff0c;仍有数据…...

python:牛客NP9---16进制数字大小

文章目录 一、题意描述输入描述&#xff1a;输出描述&#xff1a; 二、代码1.代码的实现2.读入数据 总结 一、题意 描述 计算的世界&#xff0c;除了二进制与十进制&#xff0c;使用最多的就是十六进制了&#xff0c;现在使用input读入一个十六进制的数字&#xff0c;输出它的…...

【惠友小课堂】你玉米几几呀?关爱青少年骨骼健康,助力“神兽”成长

玉 米 几 几 “你玉米几几呀”这是什么梗&#xff1f;怎么突然火了&#xff1f; 起因是一位来自云南的网友有金记录真实生活&#xff0c;在社交媒体平台上发布了一则视频&#xff0c;视频中字幕“玉米六六”实际上是对“一米六六”身高的一种谐音替换&#xff0c;这种创意表…...

【办公类-21-09】三级育婴师 视频转文字docx(等线小五单倍行距),批量改成“宋体小四、1.5倍行距、蓝色字体”

作品展示&#xff1a; 背景需求&#xff1a; 一、视频处理 1、育婴师培训的现场视频 2、下载视频&#xff0c;将视频换成考题名称 二、音频 视频用格式工厂转成MP3音频 3、转文字doc 把音频放入“网易云见外工作台”转换为“文字" 等待5分钟&#xff0c;音频文字会被写…...

Unity DropDown 组件 详解

Unity版本 2022.3.13f1 Dropdown下拉菜单可以快速创建大量选项 一、 Dropwon属性详解 属性&#xff1a;功能&#xff1a;Interactable此组件是否接受输入&#xff1f;请参阅 Interactable。Transition确定控件以何种方式对用户操作进行可视化响应的属性。请参阅过渡选项。Nav…...

Spring AOP常见面试题

目录 一、对于AOP的理解 二、Spring是如何实现AOP的 1、execution表达式 2、annotation 3、基于Spring API&#xff0c;通过xml配置的方式。 4、基于代理实现 三、Spring AOP的实现原理 四、Spring是如何选择使用哪种动态代理 1、Spring Framework 2、Spring Boot 五…...

Java学习笔记14——常量与变量

曾和儿子分享过所谓计算机程序&#xff0c;都是编写代码进行“数据处理和处理数据”而已。任何编程语言编写何种应用&#xff0c;数据都必须以某种方式表示。掌握变量和常量的用法&#xff0c;可以使代码的可维护性、可读性大大提高。 一、常量 常量就是在程序中固定不变的量…...

Neeshck-Z-lmage_LYX_v2代码实例:Streamlit交互界面开发与参数绑定逻辑

Neeshck-Z-lmage_LYX_v2代码实例&#xff1a;Streamlit交互界面开发与参数绑定逻辑 1. 项目核心&#xff1a;一个更聪明的本地绘画工具 如果你用过一些AI绘画工具&#xff0c;可能会遇到几个头疼的问题&#xff1a;想换个画风得重启软件、调参数像开盲盒、电脑配置不够直接卡…...

Ubuntu服务器生产环境部署Pixel Script Temple全记录

Ubuntu服务器生产环境部署Pixel Script Temple全记录 1. 准备工作与环境检查 在开始部署之前&#xff0c;我们需要确保服务器环境满足基本要求。首先确认你的Ubuntu服务器版本为20.04 LTS或22.04 LTS&#xff0c;这两个版本都提供长期支持&#xff0c;适合生产环境使用。 运…...

5个AI Skill实测:影视内容创作全流程自动化

为什么AI助手的能力上限取决于你装了什么Skill养虾必装的5个Skill&#xff0c;影视博主效率翻倍你的小龙虾&#xff08;OpenClaw/CodeBuddy/Windsurf&#xff09;装了几个Skill&#xff1f;很多人养虾只用来写代码、查资料&#xff0c;但其实用小龙虾做内容创作、数据分析、批量…...

OpenSC2K终极问题解决指南:20个典型开发和使用问题及快速解决方案

OpenSC2K终极问题解决指南&#xff1a;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%的决策误区:从相关性到因果性的终极分析框架

你是不是也遇到过这样的困惑&#xff1a;明明做了促销&#xff0c;销量涨了&#xff0c;却算不清到底是促销起了作用&#xff0c;还是商品本身就该爆&#xff1f;看到孩子上了补习班的同学成绩更好&#xff0c;就跟风报班&#xff0c;结果孩子成绩没涨&#xff0c;反而越来越厌…...

OpenClaw日志分析:千问3.5-35B-A3B-FP8任务失败排查方法论

OpenClaw日志分析&#xff1a;千问3.5-35B-A3B-FP8任务失败排查方法论 1. 问题背景与排查思路 上周我在尝试用OpenClaw自动化处理一批产品截图时&#xff0c;遇到了千问3.5-35B-A3B-FP8模型频繁报错的情况。任务看似简单&#xff1a;让AI识别截图中的UI元素并生成改进建议&am…...

同事离职,他在大群里发了一句“感谢一路相伴,江湖再见”,刚发出去,HR就让他撤回,理由是工作群不要发与工作无关的内容。

今天摸鱼的时候&#xff0c;听到一个极其荒诞又极其现实的职场鬼故事。隔壁部门的老李提了离职&#xff0c;今天是last day。这哥们儿可能平时武侠小说看多了&#xff0c;临走前在几百人的公司大群里发了一句&#xff1a;“感谢一路相伴&#xff0c;江湖再见”。结果呢&#xf…...

兄弟同心,其利断金:Tomcat、Nginx 与 Node.js 的“三重奏”

写在前面初学后端开发时&#xff0c;我一直困惑一个问题&#xff1a;Tomcat、Nginx、Node.js&#xff0c;它们之间到底是什么关系&#xff1f;刚开始用 Spring Boot&#xff0c;发现里面集成了 Tomcat&#xff0c;启动项目后访问 localhost:8080 就能调接口。那时我以为&#x…...

第6章 黎曼流形优化与几何方法

第6章 黎曼流形优化与几何方法 6.1 黎曼几何基础 6.1.1 复Stiefel流形与单位模流形&#xff08;Unit-Modulus Manifold&#xff09;度量 6.1.2 指数映射&#xff08;Exponential Mapping&#xff09;与平行移动&#xff08;Parallel Transport&#xff09; 6.1.3 测…...

MySQL 运算符详解

MySQL 运算符详解 MySQL 作为一款功能强大的关系型数据库管理系统,其运算符的使用贯穿于 SQL 语句的各个部分。本文将详细介绍 MySQL 中常用的运算符,包括算术运算符、比较运算符、逻辑运算符等,旨在帮助读者全面理解并掌握 MySQL 运算符的使用。 一、算术运算符 算术运算…...