js的Promise

本文详细介绍了Promise在JavaScript中的作用,包括解决回调地狱问题、生命周期的Pending-Fulfilled-Rejected状态、创建方式、实例方法如then、catch和finally,以及静态方法如Promise.all。同时讨论了Promise的特点、优点和缺点。
摘要由CSDN通过智能技术生成

Promise 对象用于表示一个异步操作的最终完成(或失败)及其结果值。

1.Promise的作用

  • 执行异步操作
  • 解决回调地狱问题
  • 并发请求(Promise.all())

2.Promise的生命周期

Promise从被new出来的那一刻起,就开始了他的生命周期(Promise的状态会在[[PromiseStatus]]中体现)。初始的状态被称为Pending,这种状态表示异步操作处在挂起期,说明异步操作尚未完成。而异步操作一旦完成,会进入一下两种状态的其中一种:
1.fulfilled(已完成):表示异步操作成功结束;
2.rejected(已拒绝):表示异步操作未成功结束,期间可能发生了错误。

此时Promise的生命周期结束。(Pending -> fulfilled 或者 Pending -> rejected)

3.创建Promise

promise构造器只接收一个参数,该参数被称为执行器(executor)的函数。该函数会被传递两个参数(方法),一个叫做resolve,另一个叫做reject。

resolve函数在成功时调用,reject函数在失败时被调用。并且resolve和reject只能被使用一次,如果之后还有resolve和reject也不会被执行了,有点儿类似于return,但是不同点在于,其他代码还会被照常执行。

new Promise((resolve, reject)=> {
  resolve('我是第一次调用resolve');
  console.log('我是其他代码');     // 继续执行
  resolve('我是第二次调用resolve'); // 不在起作用
  reject('我来调用reject');        // 不在起作用
})

也可以直接使用Promise.resolve或者Promise.reject来创建成功或者失败的Promise。

let p1 = Promise.resolve('我是成功的Promise'),
    p2 = Promise.reject('我是失败的Promise');

4.实例方法:then、catch、finally

then与catch方法存在于所有Promise实例上,并且返回一个Promise对象。

then接收两个参数。第一个参数是Promise状态为fulfilled(成功结束)的调用函数,第二个则是状态rejected(未成功结束)的调用函数。

new Promise()
  .then(res => console.log(res), err => console.log(err))

catch接收一个参数。

new Promise()
	.catch(err => {
    console.log(err)
  })

finally为 promise 添加一个回调函数,并返回一个新的 promise。这个新的 promise 将在原 promise 被兑现时兑现。而传入的回调函数将在原 promise 被敲定(无论被兑现还是被拒绝)时被调用。

Promise可以进行链式操作,这样可以解决回调地狱的问题。

new Promise()
	.then(res => {
    return res
  })
  .then(res => {
    console.log(res)
  })
  .catch(err => {
    console.log(err)
  })

5.静态方法

  • Promise.all,可以用于并发请求。
  • Promise.allSettled
  • Promise.any
  • Promise.race
  • Promise.resolve
  • Promise.reject

6.Promise的特点、优点与缺点

特点:

  1. Promise对象的状态不受外界的影响
  2. promise对象代表一个异步操作,有三种状态,pending(等待),fulfilled(成功),rejected(失败),初始状态为pending,由异步操作的结果决定状态转变为fulfilled或rejected,状态一旦改变就不会再变。

优点:

  1. 实现异步操作
  2. 解决地狱回调问题
  3. 用catch方法可以轻松捕获Promise回调中的错误,不影响系统运行

缺点:

  1. Promise无法取消,一经创建他就会立即执行,无法中途取消
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值