面试回答之promise

本文详细介绍了Promise在JavaScript中的作用,包括其状态转换、resolve和reject方法,以及Promise.all、Promise.any、Promise.race和Promise.allSettled等实用方法,帮助理解如何解决异步编程中的回调地狱问题。
摘要由CSDN通过智能技术生成

promise是ES6引入的一种异步编程解决方案,为了解决回调函数的嵌套问题。

promise有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。

只有两种变化形式:

pending ->  fulfilled(resolved)

pending ->rejected

在promise里,通过resolve()和reject()去改变状态,状态一旦改变就要执行对应的回调并且状态发生改变之后就不再变化。一个promise对象只能改变一次,无论成功还是失败,都会有一个结果数据。

promise的then方法可以使用链式调用,因为then()方法调用执行之后返回的是一个新的promise对象,可以继续使用.then方法去添加下一个回调函数,形成链式结构。

中断链式调用:返回一个pending状态的promise对象来中断promise的链式调用。

promise上的方法:

1.resolve() 方法: 用于将 Promise 对象的状态从 pending(进行中)变为 fulfilled(已完成)。它接收一个参数,这个参数会作为成功回调的结果传递出去。通常,resolve() 被用于表示异步操作成功完成。

2.reject() 方法: 用于将 Promise 对象的状态从 pending 变为 rejected(已拒绝)。它接收一个参数,这个参数会作为失败回调的结果传递出去。通常,reject() 被用于表示异步操作失败。

这两个方法是构建其他 Promise 方法的基础,其他方法如 all、allSettled、race、any 等都是通过它们构建的。

3.Promise.all() :它接收一个包含多个 Promise 对象的数组,只有当所有的 Promise 对象都变为 fulfilled 状态时,Promise.all() 才会变为 fulfilled,然后执行 then 回调;如果任何一个 Promise 对象变为 rejected 状态,Promise.all() 就会变为 rejected,并返回第一个被 reject 的 Promise 对象的结果。 

4.Promise.any() :是与 Promise.all() 相对应的方法,它接收一个包含多个 Promise 对象的数组,只有当所有的 Promise 对象都变为 rejected 状态时,Promise.any() 才会变为 rejected,并执行 catch 回调;反之,只要有一个 Promise 对象变为 fulfilled 状态,Promise.any() 就会变为 fulfilled,并执行 then 回调。 

5.Promise.race() :接收一个包含多个 Promise 对象的数组,然后返回一个新的 Promise 对象。这个新的 Promise 对象会在第一个任意一个原始 Promise 对象(无论是 fulfilled 还是 rejected)的状态发生变化时,采用该变化的状态,并返回相应的值。返回第一个执行完(不论成功失败)的 Promise实例的结果。

6.Promise.allSettled() :是一个用于处理多个 Promise 对象的方法,与 Promise.all() 不同,Promise.allSettled() 不关心 Promise 对象的状态是 fulfilled 还是 rejected。 它接收一个包含多个 Promise 对象的数组,返回一个新的 Promise 对象。这个新的 Promise 对象在所有原始 Promise 对象都被 settled(不论是 fulfilled 还是 rejected)后,采用一个包含每个 Promise 结果的数组。这样,你可以获取到每个 Promise 对象的最终状态和结果,而不会因为其中某个 Promise 被 rejected 而影响其他 Promise。

原型上有then\\catch\\finally方法

then方法: 这是Promise实例中的方法,用于注册回调函数,以处理Promise对象的状态变化。then接收两个参数,第一个是在Promise状态变为fulfilled时执行的回调函数,第二个是在Promise状态变为rejected时执行的回调函数。 

catch() 方法: 用于处理 Promise 对象的 rejected 状态。它接收一个回调函数,这个回调函数会在 Promise 对象被 rejected 时执行,允许你获取失败回调的结果并进行处理。

 

finally() 方法: 无论 Promise 对象是 fulfilled 还是 rejected,finally() 方法都会在 Promise 状态最终变化后执行。它接收一个回调函数,这个回调函数会在 Promise 对象 settled 时执行,无论是成功还是失败

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值