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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

[虚拟机保护逆向] [HGAME 2023 week4]vm

[虚拟机保护逆向] [HGAME 2023 week4]vm 虚拟机逆向的注意点:具体每个函数的功能,和其对应的硬件编码的*长度* 和 *含义*,都分析出来后就可以编写脚本将题目的opcode转化位vm实际执行的指令 :分析完成函数功能后就可以编写脚本输出…

【LangChain学习之旅】—(12) 代理(上):ReAct框架,推理与行动的协同

【LangChain学习之旅】—(12) 代理(上):ReAct框架,推理与行动的协同 代理的作用ReAct 框架通过代理实现 ReAct 框架总结时刻之前介绍的思维链(CoT)展示了 LLMs 执行推理轨迹的能力。在给出答案之前,大模型通过中间推理步骤(尤其是与少样本提示相结合)能够实现复杂的…

python编程从入门到实践答案二

python编程从入门到实践 第五章 if语句1.条件测试:2.更多的条件测试:3.外星人颜色#1:4. 外星人颜色#2:5. 外星人颜色#3:6. 人生的不同阶段:7. 喜欢的水果:8. 以特殊方式跟管理员打招呼&#xff…

2024年【电工(初级)】考试内容及电工(初级)考试报名

题库来源:安全生产模拟考试一点通公众号小程序 电工(初级)考试内容根据新电工(初级)考试大纲要求,安全生产模拟考试一点通将电工(初级)模拟考试试题进行汇编,组成一套电…

MySQL中常用的操作语句已汇总

目录 一、库语句 1.查询现有数据库 2.创建数据库 3.选中数据库 ​编辑 4.删除数据库 二、初阶表操作 1.查看数据库现有表 2.查看表结构 3.创建表 4.删除表 5.全列查询 6.删除表2 7.修改操作 三、插入操作 1.全列插入 2.指定列插入 3.一次插入多组数据 4.插入…

基于深度学习YOLOv8+Pyqt5的抽烟吸烟检测识别系统(源码+跑通说明文件)

wx供重浩:创享日记 对话框发送:39抽烟 获取完整源码源文件4000张已标注的数据集配置说明文件 可有偿59yuan一对一远程操作跑通 效果展示 基于深度学YOLOv8PyQt5的抽烟吸烟检测识别系统(完整源码跑通说明文件) 各文件说明 模型评价…

算法中的数学知识

文章目录 算法中的数学知识约数约数个数约数之和 筛法求质数阶乘分解解法一解法二: 欧拉函数基本模板筛法求欧拉函数大数据幂的欧拉函数 快速幂费马小定理快速幂求逆元数论分块例题:[因数平方和](https://www.acwing.com/problem/content/4665/)分析:具体…

HTML 学习笔记(一)开始

一、介绍: 首先引用百度百科的一段话作为介绍:   HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本…

flink 总结

flink 流式api checkpoint state 状态分类 Managed State 和 Raw State Managed State Flink 自己管理,支持多种数据结构 Raw State 用户自己管理, 只支持byte Managed Staste 分为 Keyed State 和 operator State Managed State 只能在Keyed Str…

【自制操作系统】系统启动流程,工具使用和启动区的制作

📝本文介绍 本文主要从系统系统的启动流程开始,中间介绍一些所用工具的使用方法,最后将完成一个启动区的制作。此次的启动区只涉及到汇编代码。 👋作者简介:一个正在积极探索的本科生 📱联系方式&#xff1…

【Week Y1】调用官方权重进行检测

YOLO白皮书之调用官方权重进行检测 一、下载yolo-v5s源码,并配置编译环境二、输入本地图片查看检测结果三、输入本地视频查看检测结果 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项…

【大厂AI课学习笔记NO.71】AI算力芯片GPU/TPU等

AI算力芯片的发展历程 人工智能(AI)算力芯片的发展历程紧密地跟随着AI技术的发展脚步。从早期的基于传统中央处理器(CPU)的计算,到图形处理器(GPU)的广泛应用,再到专门为AI设计的处…