Promise原理解析与实现
知识要点
介绍
Promise
是 JavaScript
异步编程的一种流行解决方案,使用原生手写方式一步一步的带你实现 Promise
库
Promise 类
Promise
的构造函数必须接收一个函数参数(也就是需要执行异步任务的函数),该函数将在传入以后立即调用,并传入 Promise
对象下的两个方法 resolve
和 reject
Promise 状态
每一个 Promise
对象都存在以下三种状态:
- PENDING : 进行中,
Promise
对象的初始状态 - FULFILLED : 已成功
- REJECTED : 已失败
每一个
Promise
对象只能由PENDING
状态变成FULFILLED
或REJECTED
,且状态发生变化以后就能再改变了
一个Promise
对象状态的变化由传入的异步任务完成情况来决定的,Promise
提供了两个用来改变状态的方法
promise.#resolve 方法
将 Promise
对象的状态从 PENDING
变为 FULFILLED
,并执行成功后的注册任务
注意:如果当前状态已经改变过了,则直接
return
promise.#reject 方法
将 Promise
对象的状态从 PENDING
变为 REJECTED
,并执行失败后的注册任务
注意:如果当前状态已经改变过了,则直接
return
promise.then 方法
接收两个函数作为参数,根据当前
Promise
的状态来做不同的处理
返回值
then
方法在执行最后必须返回一个新的 Promise
对象
简而言之:把新返回的
Promise
对象的resolve
和reject
与then
中执行的fulfilledHandler
和rejectedHandler
添加到一个任务队列中执行,这样才能使用原有的then
执行完成以后才执行新的Promise
中的then
当一个[Promise
]
- 如果then中的回调函数没有返回值,那么then返回的Promise将会成为接受状态,并且该接受状态的回调函数的参数值为 undefined。
- 如果then中的回调函数返回一个值,那么then返回的Promise将会成为接受状态,并且将返回的值作为接受状态的回调函数的参数值。
- 如果then中的回调函数抛出一个错误,那么then返回的Promise将会成为拒绝状态,并且将抛出的错误作为拒绝状态的回调函数的参数值。
- 如果then中的回调函数返回一个已经是接受状态的Promise,那么then返回的Promise也会成为接受状态,并且将那个Promise的接受状态的回调函数的参数值作为该被返回的Promise的接受状态回调函数的参数值。
- 如果then中的回调函数返回一个已经是拒绝状态的Promise,那么then返回的Promise也会成为拒绝状态,并且将那个Promise的拒绝状态的回调函数的参数值作为该被返回的Promise的拒绝状态回调函数的参数值。
- 如果then中的回调函数返回一个未定状态(pending)的Promise,那么then返回Promise的状态也是未定的,并且它的终态与那个Promise的终态相同;同时,它变为终态时调用的回调函数参数与那个Promise变为终态时的回调函数的参数是相同的。
promise.catch 方法
promise.finally 方法
ECMA2018 Added
Promise.resolve 方法
Promise.reject 方法
Promise.all 方法
//不需要reject
(resolve)=>{
}
Promise.race 方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。