1.定义
原生Promise接受一个参数,且参数只能为函数,其函数的参数为两个函数
new Promise((resolve, reject) => {})
2.作用
Promise本身就是一个状态机,其有三种状态:pending, fullfilled, rejected,且状态只能由 Pending 变为 Fulfilled 或由 Pending 变为 Rejected ,且状态改变之后不会在发生变化,会一直保持这个状态
在截图中可以看出,Promise还有两个内部属性:PromiseStatus和PromiseValue
3.then回调
Promise的实例有一个then方法,接收两个函数参数。该方法支持多次调用
调用resolve,then的第一个函数参数执行,
调用reject,then的第二个函数参数执行
4.微任务
5.链式调用
6.处理回调
返回值不是Promise对象时 (一段文字),则直接将返回值作为新返回的 Promise 对象的值
返回值是Promise对象时 ,其回调函数会等待这个Promise对象的状态发生变化,(执行resolve或reject时),之后进行调用,并且新的Promise状态和返回的这个Promise对象的状态相同。
7.处理异常
如果 onFulfilled 或者onRejected 抛出一个异常 err ,则返回的Promise对象的状态必须变为失败Rejected,并返回失败的值 err
8.then的返回穿透
前面第三条说道then接收两个函数入参,分别对应resolve和reject,那如果返回的并非函数会如何?
当then的onFulfilled参数不是函数时,返回的Promise对象的状态必须变成fulfilled,并返回调用then的Promise的成功的值
当then的onRejected参数不是函数时,返回的Promise对象的状态必须变成rejected,并返回调用then的Promise的失败的值
promise的自主实现已经大概明白了,等写出来跑通,再整理出来再发一篇日记记录下