promise

promise的三种状态: pending(进行中)、fulfilled(已成功)和rejected(已失败)(一旦状态改变,就不会再变)。非异步。 一旦新建它就会立即执行,无法中途取消。

Promise是一个构造函数,用来实例化一个Promise实例。这个Promise构造函数,用一个函数来作为参数,这个作为参数的函数有两个参数,第一个参数是resolve,第二个参数是reject,都是必填项。
异步是一个耗时的过程,当在执行异步的时候,就是Promise的等待过程,当异步函数执行完,如果异步执行成功,就调用resolve,将等待切换到成功,如果异步执行失败,我就调用reject,将等待切换到失败。

注意:在promise的then()中存放着异步函数,所有的异步都存在于js的任务队列中,当js的主线程执行完毕后,会依次执行任务队列中的内容。

then:方法可以有两个参数(第二个可选),第一个是resolve状态的回调函数第二个是reject状态的回调函数(可选)

then方法返回的是一个新的Promise实例(不是原来那个Promise实例),Promise返回的resolve和reject,这两个参数分别和then方法的两个参数对应。当省略第二个参数时,catch的存在就很有意义 。

如果前一个Promise对象是resolve状态,则后一个Promise对象执行第一个参数方法(resolve),如果前一个Promise对象是reject状态,则后一个Promise对象执行第二个参数方法(reject),如果前一个Promise对象抛出异常(throw error),则后一个Promise对象执行第二个参数方法(reject),如果前一个Promise对象返回具体的值,则此数值将作为后一个Promise对象的输入,执行第一个参数方法(resolve),如果前一个Promise对象没有返回状态(resolve或者reject),也没有抛错(throw error),也没有返回具体数值,我们则认为它返回 了一个undefined,则undefined将作为后一个Promise对象的输入,执行第一个参数方法resolve。

catch:catch就是then方法的语法糖,catch方法是.then(null, rejection)或.then(undefined, rejection)的别名,也就是说,catch也是then,它用于捕获错误,它的参数也就是then的第二个参数。 如果不写第二个参数,执行了reject后,会进入catch中的。

输出: //我在主线程 //我是异步执行的失败:失败啦

重点: promise同样也存在局限,例如:

1. throw new Error('error'); console.log('不会执行这里');因为 throw error 的缘故,代码被阻断执行,并不会打印 “不会执行这里”

2. const promise = new Promise(null);console.log('不会执行这里');这是因为通过无效的方式使用 Promise,并且出现了一个错误阻碍了正常 Promise 的构造,结果会得到一个立刻抛出的异常,而不是一个被拒绝的 Promise。

3. let promise = new Promise(() => { throw new Error('error')});console.log('不会执行这里'); 这次会正常的打印 “不会执行这里”,说明 Promise 内部的错误不会影响到 Promise 外部的代码。
其实这并不是 Promise 独有的局限性,try..catch 也是这样,同样会捕获一个异常并简单的吃掉错误。
而正是因为错误被吃掉,Promise 链中的错误很容易被忽略掉,这也是为什么会一般推荐在 Promise 链的最后添加一个 catch 函数,因为对于一个没有错误处理函数的 Promise 链,任何错误都会在链中被传播下去。

Promise.all():

Promise.all就是用于将多个 Promise 实例,包装成一个新的 Promise 实例。
Promise.all,接收一个数组作为参数,数组的每一项都返回Promise实例。

p1,p2,p3都是返回promise实例,Promise.all不关心他们的执行顺序。

如果他们都返回成功的状态,Promise.all则返回成功的状态,输出一个数组,是这三个p1,p2,p3的返回值,数组的顺序和他们的执行顺序无关,和他们作为参数排列的顺序有关。可以进行人为进行控制。

如果有一个返回失败(reject),Promise.all则返回失败(reject)的状态,此时第一个被reject的实例的返回值,会传递给P的回调函数。三个promise实例参数之间是“与”的关系,全部成功,Promise.all就返回成功,有一个失败,Promise.all就返回失败

Promise.race():

Promise中的竞态,用法和Promise.all类似,对应参数的要求和Promise.all相同,传入一个数组作为参数,参数要返回一个Promise实例。
race就是竞争的意思,数组内的Promise实例,谁执行的快,就返回谁的执行结果,不管是成功还是失败。

p1是第一个完成的,所以p的返回结果就是p1的执行结果,而且即使完成,进程是不会立即停止,还会继续执行下去。 

Promise.finally():

finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。该方法是 ES2018 引入标准的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值