# 深入理解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。