最近把Promise重新学了一下,对Promise有了更深层次的理解,话不多说,可以看下代码
/*自定义promise函数模块 */
(function (window) {
const PENDING = 'pending'
const RESOLVED = 'resolved'
const REJECTED = 'rejected'
class Promise{
/*
Promise构造函数
excutor 执行器函数
*/
constructor(excutor) {
//将当前Promise对象保存起来
const self = this//代表Promis对象
self.status = PENDING //给promise对象指定status属性,初始值为pending
self.data = undefined //给promise指定一个用于存储结果数据的属性
self.callbacks = [] //每个元素的结构:{onResolved(){},onRejected(){}}0
function resolve(value) {
//如果当前状态不为pending,直接结束
if (self.status !== PENDING) {
return
}
//将状态改为resollved
self.status = RESOLVED
//保存value数据
self.data = value
//如果有待执行的callback函数,立即执行异步回掉函数
if (self.callbacks.length > 0) {
setTimeout(() => { //放入队列中执行所有成功的回调
self.callbacks.forEach(callbackObj => {
callbackObj.onResolved(value)
})
});
}
}
function reject(reason) {
//如果当前状态不为pending,直接结束
if (self.status !== PENDING) {
return
}
//将状态改为rejected
self.status = REJECTED
//保存value数据
self.data = reason
//如果有待执行的callback函数,立即执行异步回掉函数
if (self.callbacks.length