# 深入理解Promise

# 准备

# 区分实例对象与函数对象

  • 1、实例对象:new 函数产生的对象,称为实例对象,简称对象
  • 2、函数对象:将函数作为对象使用时,简称函数对象
function Fn(){} 
const fn = new Fn();   // Fn是构造函数  fn是实例对象
console.log(Fn.prototype) // Fn是函数对象

# 两种类型的回调函数

  • 1、同步回调 立即执行、完全执行后才结束。不会放到回调队列中。 数组遍历相关的回调函数 & Promise的excutor函数
const arr = [1,2,3];
arr.forEach(item => {
    console.log(item)
});
console.log('数组遍历后')
// 输出顺序  1,2,3,数组遍历后
  • 2、异步回调 不会立即执行,会放到回调队列中将来执行
setTimeout(() => {  // 异步回调函数,会放入队列中执行
    console.log('1')
}, 0);

console.log('2') 
// 输出顺序 2 undefined 1

# Promise的理解和使用

# Promise的三种状态

  • pendding (待定)。初始状态,既没有兑现也没有被拒绝
  • fulfilled (已兑现)。意味着操作成功
  • rejected (已拒绝)。意味着操作失败

TIP

  • 单向状态变更。 不可逆向
  • pendding => fulfilled
  • pendding => rejected

# Promise静态方法

  • all(ES2015): 全部执行成功,或者任意一个执行失败
  • allSettled(ES2020): 执行多个Promise,不论成功失败。结果全部返回
  • any(ES2021): 接受一个Promise集合,返回第一个成功的
  • race(ES2015): Promise集合中,返回最快的Promise触发结果。
  • resolve : 将现有对象转为 Promise 对象
  • rejected : 返回一个新的 Promise 实例,该实例的状态为rejected。
Last Updated: 10/31/2022, 9:57:48 PM