Promise

142 阅读2分钟
1.定义

原生Promise接受一个参数,且参数只能为函数,其函数的参数为两个函数

new Promise((resolve, reject) => {})
2.作用

Promise本身就是一个状态机,其有三种状态:pending, fullfilled, rejected,且状态只能由 Pending 变为 Fulfilled 或由 Pending 变为 Rejected ,且状态改变之后不会在发生变化,会一直保持这个状态 image.png 在截图中可以看出,Promise还有两个内部属性:PromiseStatus和PromiseValue

3.then回调

Promise的实例有一个then方法,接收两个函数参数。该方法支持多次调用 调用resolve,then的第一个函数参数执行, 调用reject,then的第二个函数参数执行 image.png

4.微任务

image.png

5.链式调用

image.png

6.处理回调

image.png

返回值不是Promise对象时 (一段文字),则直接将返回值作为新返回的 Promise 对象的值 image.png 返回值是Promise对象时 ,其回调函数会等待这个Promise对象的状态发生变化,(执行resolve或reject时),之后进行调用,并且新的Promise状态和返回的这个Promise对象的状态相同。

7.处理异常

image.png

如果 onFulfilled 或者onRejected 抛出一个异常 err ,则返回的Promise对象的状态必须变为失败Rejected,并返回失败的值 err

8.then的返回穿透

前面第三条说道then接收两个函数入参,分别对应resolve和reject,那如果返回的并非函数会如何? image.png

当then的onFulfilled参数不是函数时,返回的Promise对象的状态必须变成fulfilled,并返回调用then的Promise的成功的值

image.png

当then的onRejected参数不是函数时,返回的Promise对象的状态必须变成rejected,并返回调用then的Promise的失败的值

promise的自主实现已经大概明白了,等写出来跑通,再整理出来再发一篇日记记录下