Promise(微任务)- 让你看完就懂

news2024/11/24 18:30:20

1. 图示

思维导图链接 https://www.zhixi.com/view/23ff2291

在这里插入图片描述

2. 使用promise原因

在没有promise的时候,一直使用setTimeout函数,这样就会造成回调地狱。

3. 基本状态

promise 有三种状态

  1. pending(此时 promise还没有调用完成)
  2. fulfilled(promise 调用完成,状态是成功了)
  3. rejected(promise 调用完成,状态是失败了)

Promise 状态一旦从pending转换为fulfilled或者rejected, 那么状态将不会再次改变

4. 类上的常用方法

Promise 类上方法也是经常使用的

  1. Promise.resolve()
传入值返回值
传入一个promise res值返回res, 直接promise 结果值
传入一个promise rej 值返回为rej类型, 直接promise 结果值
传入一个基本类型值返回res类型, 直接获取值

结论 resolve 传入rej 类型时,返回也是rej。但是无论传入什么都被解析为最终结果

  1. Promise.reject()
传入值返回值
传入一个promise res值直接是rej ,直接返回promise
传入一个promise rej 值直接是rej, 直接返回promise
传入一个基本类型值返回res类型, 直接获取值

结论 reject 传入什么都是rej,且返回值就是传入值

  1. Promise.all()

    传入一个promise数组(如果是基本类型直接就是 res类型的Promise), 等待所有的promise 完毕,但是有一个promise为rej 就直接返回 失败结果, 不再等待全部执行完毕。

  2. Promise.race()

    是 Promise.race 只要传入的 Promise 对象,有一个状态变化了(无论对错),就会立即结束,而不会等待其他 Promise 对象返回。

  3. Promise.allSettled()

    传入一个promise数组(如果是基本类型直接就是 res类型的Promise), 无论是正确还是错误,最后整合为一个数组,全部返回。返回的值代表每个promise的状态和结果,错误的就是 错误状态和错误信息。

5. 原型链式调用返回值

  1. then resolve返回, then reject 返回, catch 返回 三者 return 后是一样的
三者一样
1.传入一个promise res值   返回res类型, 直接promise 结果值
2.传入一个promise rej 值   直接是rej,  直接promise 结果值
3.传入一个基本类型值      返回res类型, 直接获取值
  1. finally 返回

不管promise最后的状态,在执行完then或catch指定的回调函数以后,都会执行finally方法指定的回调函数。

finally 是没有return (返回值的),且不对当前一次的返回值造成影响。且finally 是没有任何传参的。

6.(then 里面的 reject) 和 catch 的区别

1.catch 方法可以捕获到 catch 之前整条 promise 链路上所有抛出的异常。

2.then 方法的第二个参数捕获的异常依赖于上一个 Promise 对象的执行结果。

如果是promise内部报错 reject 抛出错误后,then 的第二个参数就能捕获得到,如果then的第二个参数不存在,则catch方法会捕获到。

如果是then的第一个参数函数 resolve 中抛出了异常,即成功回调函数出现异常后,then的第二个参数reject 捕获捕获不到,catch方法可以捕获到。

7. async await 合并使用

1.await 同一行后面的内容对应 Promise 主体内容,即同步执行的
2.( 重点) await 下一行的内容对应 then()里面的内容,是异步执行的,
其实也是await这行执行的相当于then方法。对await右边的值进行返回
示例:
    async function asyncFun() {
   console.log('async1 start');
   await 111;
   console.log('async1 inner');
    }
    asyncFun();
    console.log('script end');
    
3.await 同一行后面应该跟着一个 Promise 对象,如果不是,需要转换(如果是常量会自动转换)
4.async 函数的返回值还是一个 Promise 对象

8. 使用try catch 的注意事项

try catch 是传统的异常捕获方式,这里只能捕获同步代码的异常,并不能捕获异步异常,因此无法对 Promise 进行完整的异常捕获。

总结,看道题


function promise2() {  
  return new Promise((resolve) => {  
    console.log('promise2 start');  
    resolve();  
  })  
}  
function promise3() {  
  return new Promise((resolve) => {  
    console.log('promise3 start');  
    resolve();  
  })  
}  
function promise4() {  
  return new Promise((resolve) => {  
    console.log('promise4 start');  
    resolve();  
  }).then(() => {  
    console.log('promise4 end');  
  })  
}  
async function asyncFun() {  
  console.log('async1 start');  
  await promise2();  
  console.log('async1 inner');  
  await promise3();  
  console.log('async1 end');  
}  
setTimeout(() => {  
  console.log('setTimeout start');  
  promise1();  
  console.log('setTimeout end');  
}, 0);  
asyncFun();  
promise4();  
console.log('script end');

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

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

相关文章

改进花朵授粉算法的无线传感器网络部署优化(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

某汽车座椅进行的头冲吸能实验的仿真计算

本案例运用hypermesh和lsdyna联合仿真,主要是针对某座椅进行的头冲吸能实验的仿真计算。这个工况考察座椅背部的塑料件的破坏情况,以及头部模块的加速度情况,达到保护人头部的效果。 本案例用户可以学习到: 1、螺栓预紧力的施加…

IntelliJ IDEA + spring-boot+mysql简单实现获取数据库数据接口例子

一、新建一个spring-boot项目 demo 项目结构与文件的含义: 二、项目编译入口代码 DemoApplication.java SpringBootApplication //EnableAutoConfiguration(exclude{DataSourceAutoConfiguration.class}) public class DemoApplication {public static void main(…

Linux系统编程

Linux系统中所见皆文件 bin:所存放二进制可执行文件 boot:存放开机启动程序 dev:存放设备文件 home:存放用户 etc:用户信息和系统配置文件 lib:库文件 root:管理员宿主目录(家目录&…

Linux计划任务管理,网络管理

一,计划任务管理: 任务管理很宽泛,这里是指的计划任务管理,在指定的时间执行。 at命令 : 由atd守护进程来执行,atd进程会定期检查系统上的 /var/spool/at 目录,获取at命令写入的任务。 &#x…

Linux CentOS系统安装mysql8.0.31(tar方式)

Linux系统安装mysql8.0.31(TAR方式) 文章目录Linux系统安装mysql8.0.31(TAR方式)安装包的下载安装Mysql8.0.31注册成系统服务并自启动问题总结启动异常一简单使用安装包的下载 选择的是 MySQL Community Server 进行下载 官网下…

第4季1:将AR0130摄像头更换为OV9712摄像头

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、SoC对Sensor的支持情况 在海思SDK的Hi3518E V200R001C01SPC030\00.hardware\chip\document_cn目录下,我们重点关注这两个文档:《Hi3518EV200经济型HD IP Camera SoC产品…

wordpress插件-wordpress蜘蛛记录插件

wordpress蜘蛛插件,我们为什么要wordpress装蜘蛛插件,一个合格的SEO人员必须懂得分析网站的蜘蛛情况,wordpress蜘蛛插件可以让我们分析出各大搜索引擎蜘蛛的访问间隔频率,以及最受蜘蛛喜爱的页面,让你精确地分析搜索引…

Unity DOTS学习 前置知识(二)

ECS 架构和一些专用术语 Entity-Component-System 实体组件系统(ECS )架构遵循组合优于继承的原则面向数据设计弱耦合常被应用在游戏开发上 本质:组合的是数据数组而非对象数组 ECS示例图: Entity 虽然叫做实体,但是并非对象或容器&…

[网络工程师]-应用层协议-FTP

文件传输协议(File Transfer Protocol,FTP)简称为“文件协议”,用于在Internet上控制文件的双向传输。客户上传文件时,通过服务器20端口建立的连接是建立在TCP之上的数据连接,通过服务器21号端口建立的连接…

01 - 进阶操作系统(BIOS)

---- 整理自狄泰软件唐佐林老师课程 1. BIOS - Base input & Output system BIOS是上电后第一个运行的程序 BIOS首先检测硬件状态,检测通过后立即进行硬件初始化工作 BIOS会在内存中建立中断向量表(提供硬件访问的方法) BIOS最后将控制…

优思学院|韦伯的组织理论在今天还有意义吗?

韦伯(Max Weber)是提出官僚组织理论的一个德国杰出社会学家,他认为“官僚组织方式”(Bureaucracy)是理想的企业组织形态。 “官僚组织方式”是一种组织管理的方式,特征是组织内各人的职位(Posi…

卡莱特在创业板上市:IPO首日跌破发行价,周锦志为实际控制人

12月1日,卡莱特云科技股份有限公司(下称“卡莱特”,SZ:301391)在深圳证券交易所创业板上市。本次上市,卡莱特共计发行1700万股,发行价为96.00元/股,募资总额约为16.32亿元,募资净额约…

国产自研、安全、高可用——袋鼠云大数据基础平台EasyMR筑基企业数字化转型

对于科技领域,只有自己掌握核心关键技术,实现自主可控,才能摆脱越来越频繁的“卡脖子事件”,保证企业和国家信息安全。 俗话说“基础不牢,地动山摇“。大数据基础平台什么?是打地基的,是重中之…

多功能无线测量仪的设计与制作

目录 第一章 绪论 1 1.1设计目的及意义 1 1.2课题的概述 1 1.3设计的主要内容介绍 1 第二章 多功能无线测量工作原理的介绍 2 2.1 AT89C51单片机介绍 2 2.2 多功能无线测量工作原理的介绍 5 2.2.1超声波的应用领域 5 2.2.2 超声波距离传感器简介 6 2.2.3超声波测距的原理 7 2.2…

我为何从测试转测试开发,并坚持了10年?

入行测试开发,马上就要10年了。创业公司待过,大公司也待过,工作这一路走来,一些心得,转变,职场体会,早就想写出来分享一下。这个历程包含了技术的提升,工程师的素养和对这个行业的点…

基于springboot信用分析管理系统设计与实现。

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

【MySQL事务_2_事务提交与回滚】

在MySQL中,事务提交与回滚 对t_act进行提交和回滚操作 (1).提交操作(非事务成功) update t_act set balance400 where actno1; update t_act set balance200 where actno2;(2).提交操作(非事务失败) update t_act set balance400 where actno1; update t_act set…

虹科案例|太赫兹技术如何看透文物下的秘密?

文物是人类在社会活动中遗留下来的具有历史、艺术、科学价值的遗物和遗迹,具有重要价值。文物是帮助现代人探寻历史、还原历史真相的最有力依据,同时也是历史时间工艺水平的记录。历史是一个国家文化体系的重要组成部分,而文物又是一个国家悠…

attention加权机制

attention 1.在模型举例在机器翻译的任务当中,翻译得到的每个y的时候,更加关注于某个x,当翻译am的时候,就应该更关注输入当中的 是,让机器也具备这种关注的能力。 2.怎么关注?当翻译y1的时候,y1…