# Promise

# Promise 的理解

  • Promise 是一种为了避免回调地狱的异步解决方案
  • Promise 是一种状态机: pending(进行中)、fulfilled(已成功)和rejected(已失败) 只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

# 回调地狱

  • 回调函数中嵌套回调函数的情况就叫做回调地狱。
  • 回调地狱就是为是实现代码顺序执行而出现的一种操作,它会造成我们的代码可读性非常差,后期不好维护。

# Promise是什么?

  • Promise是最早由社区提出和实现的一种解决异步编程的方案,比其他传统的解决方案(回调函数和事件)更合理和更强大。

  • ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

  • ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。

# Promise是为解决什么问题而产生的?

promise是为解决异步处理回调金字塔问题而产生的

# Promise的两个特点

  1. Promise对象的状态不受外界影响

1)pending 初始状态

2)fulfilled 成功状态

3)rejected 失败状态

Promise 有以上三种状态,只有异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个状态

  1. Promise的状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可以逆,只能由 pending变成fulfilled或者由pending变成rejected

# Promise的三个缺点

  1. 无法取消Promise,一旦新建它就会立即执行,无法中途取消
  2. 如果不设置回调函数,Promise内部抛出的错误,不会反映到外部
  3. 当处于pending状态时,无法得知目前进展到哪一个阶段,是刚刚开始还是即将完成

# Promise在哪存放成功回调序列和失败回调序列?

  1. onResolvedCallbacks 成功后要执行的回调序列 是一个数组

  2. onRejectedCallbacks 失败后要执行的回调序列 是一个数组

以上两个数组存放在Promise 创建实例时给Promise这个类传的函数中,默认都是空数组。
每次实例then的时候 传入 onFulfilled 成功回调 onRejected 失败回调,如果此时的状态是pending 则将onFulfilled和onRejected push到对应的成功回调序列数组和失败回调序列数组中,如果此时的状态是fulfilled 则onFulfilled立即执行,如果此时的状态是rejected则onRejected立即执行

上述序列中的回调函数执行的时候 是有顺序的,即按照顺序依次执行

上次更新: 3/31/2023, 3:36:19 PM