Promise的使用方法[通俗易懂]

Promise的使用方法[通俗易懂]PS~:Promise是一个构造函数,自己身上有all、reject、resolve等几个方法,原型上有then、catch等几个方法。Promise对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。一、Promise有以下三种状态:pending:初始状态,既不是成功,也不是失败状态,(等待中,或者进行中,表示还没有得到结果)fulfi…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

PS~: Promise是一个构造函数,自己身上有all、reject、resolve等几个方法,原型上有then、catch等几个方法。

Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。

 

一、Promise有以下三种状态:

pending: 初始状态,既不是成功,也不是失败状态 , ( 等待中 , 或者进行中 , 表示还没有得到结果 )

fulfilled: 意味着操作成功。

rejected: 意味着操作失败。

Promise有两种状态改变的方式,而且状态只能从pending改变为resolved或者rejected,并且不可逆。当状态发生变化,Promise.then绑定的函数就会被调用。

注意:Promise一旦新建就会「立即执行」,无法取消。这也是它的缺点之一。

 

二、我们使用new来构建一个Promise。

Promise接受一个「函数」作为参数,该函数的两个参数分别是resolve和reject。这两个函数就是就是「回调函数」

resolve函数的作用:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去; 

reject函数的作用:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

 

Promise的使用方法[通俗易懂]

data为:字符串‘成功’ 或者字符串‘失败’

如果异步操作获得了我们想要的结果,那我们将手动调用resolve函数,在then的第一个作为参数的匿名函数中可以获取数据,如果我们得到了错误的结果,调用reject函数,在then函数的第二个作为参数的匿名函数中获取错误处理数据。 这样,一个次完整的Promise调用就结束了。

三、.then()

then()方法执行后会返回一个新的Promise实例。它有两个参数,分别为:Promise从pending变为fulfilled和rejected时的回调函数(第二个参数非必选)。这两个函数都接受Promise对象传出的值(data)作为参数

语法

Promise的使用方法[通俗易懂]

onCompleted(必传参数):操作成功完成时要运行的履行处理程序函数。

onRejected(选传参数):操作被拒绝时要运行的错误处理程序函数。

Promise任务链

对于Promise的then()方法,then总是会返回一个Promise实例,因此你可以一直调用then,形如p().then().then().then().then().then()…..

1)如果then没有传入处理函数,那么会返回一个继承了上一个处理状态的Promise对象

Promise的使用方法[通俗易懂]

Promise的使用方法[通俗易懂]

                                                                                               打印结果

2)如果then传入处理函数,那么默认返回一个fulfilled/resolved状态的Promise对象

Promise的使用方法[通俗易懂]

Promise的使用方法[通俗易懂]

                                                                                               打印结果

3)如果then传入处理函数,通过处理函数显示的return了一个新的Promise,那么返回这个显示的Promise对象

Promise的使用方法[通俗易懂]

Promise的使用方法[通俗易懂]

                                                                                               打印结果

弊端:不易中途终止后续任务执行

四、.catch()

处理rejected 的情况,与then的第二个参数onRejected相同

Promise的使用方法[通俗易懂]

Promise的使用方法[通俗易懂]

                                                                                              打印结果↑

Promise的使用方法[通俗易懂]

Promise的使用方法[通俗易懂]

                                                                                              打印结果↑

可以捕获.catch以上的任一错误(前提是:.then中的onRejected函数没有做任何处理)

补充~:

1).catch与.then中的onRejected函数冲突,如果前面.then中出行了onRejected函数,.catch将不会执行。

2).catch执行后会返回一个Promise对象,且状态默认为fulfilled/resolved(与.then相似)

五、.all   

多任务处理

Promise的使用方法[通俗易懂]

Promise的使用方法[通俗易懂]

                                                                                           打印结果

需要等(p1、p2)所有promise执行完,才可以执行then

六、.race

Promise的使用方法[通俗易懂]

Promise的使用方法[通俗易懂]

                                                                                              打印结果

(p1、p2)只要有一个执行完,就会执行then。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206720.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SPI协议简单介绍

    SPI协议简单介绍导言SPI是串行扩展总线。串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高。同时系统的更改和扩充极为容易。常用的串行扩展总线有:I2C(InterICBus)总线、单总线(1-WIREBUS)、SPI(SerialPeripheralInterface)总线及Microwire/PLUS等。一、SPI协议SPI总线是微控制器四线的外部总线。SPI没有明文标准,是一种事实总线,对通信操作的实现由芯片厂商和驱动开发者通过datasheet和applicat..

    2022年10月15日
    2
  • c#开发微信公众平台_小程序开发教程

    c#开发微信公众平台_小程序开发教程本文转自http://www.wuling365.com/Article/View.aspx?Id=30  想学习微信开发技术请加入我们!郴州微信开发QQ群:587978628  最近在开发“郴州微信营销”系统,网络上涉及微信开发的代码99%都是PHP写的,由于本人不想再学习PHP,于是决定用C#开发。现将开发过程及一些实现细节记录下来,供大家参考。由于本人能力有限,错误之处在所难免,欢

    2022年8月20日
    10
  • 初级SSM框架整合

    初级SSM框架整合本次ssm整合是对于初学者来说的第一次整合,里面还有很多地方可以进行优化,这点以后有空再分享。主要是体现整合的思路和过程。1、准备数据/*创建用户表*/CREATETABLE`user`( idBIGINTPRIMARYKEYAUTO_INCREMENT, usernameVARCHAR(50), passwordVARCHAR(50), emailVARCHAR(…

    2022年5月21日
    38
  • verilog变长移位寄存器「建议收藏」

    verilog变长移位寄存器「建议收藏」verilog变长移位寄存器普通的移位寄存器可以按如下设置,下面是一个一次移动一位的移位寄存器。moduleshift_stationary(clk,dat,ctrl,shift_out);inputclk;input[15:0]dat;input[1:0]ctrl;outputreg[15:0]shift_out;always@(posedgeclk)begincase(ctrl)2’b00:begin

    2022年7月16日
    13
  • 可执行源码:基于javaweb实现学生成绩管理系统,三种角色学生和教师 管理员,实现了学生信息管理,课程管理,教师信息管理,学生成绩汇总,学生登录注册,教师和管理员的登录,个人信息修改等[通俗易懂]

    可执行源码:基于javaweb实现学生成绩管理系统,三种角色学生和教师 管理员,实现了学生信息管理,课程管理,教师信息管理,学生成绩汇总,学生登录注册,教师和管理员的登录,个人信息修改等[通俗易懂]基于javaweb实现学生成绩管理系统,实现了学生信息管理,课程管理,教师信息管理,学生成绩汇总,学生登录注册,教师和管理员的登录,个人信息修改等。系统功能大致描述:基于javaweb实现学生成绩管理系统,实现了学生信息管理,课程管理,教师信息管理,学生成绩汇总,学生登录注册,教师和管理员的登录,个人信息修改等。使用的技术有jsp,servlet,jdbc,mysql,html,css,js…

    2022年7月16日
    16
  • SpringBoot自动装配原理(简单易懂)

    SpringBoot自动装配原理(简单易懂)1、什么是自动装配自动装配就是把别人(官方)写好的config配置类加载到spring容器,然后根据这个配置类生成一些项目需要的bean对象。(小声逼逼:就像我们自己在项目了写的config配置类一样的,只不过这个是别人写好的,你什么都不用管)2、自动装配的开关在哪里@SpringBootApplication|–@EnableAutoConfiguration|–@Import({AutoConfigurationImportSelector.class})在@Spri

    2025年5月31日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号