const PENDING = 'pending'
const RESOLVED = 'resolved'
const REJECTED = 'reject'
function Promise(executor) {
var self = this
self = PENDING
self.resolvedCallbacks = []
self.rejectedCallbacks = []
function resolve(value) {
if (self.status === PENDING) {
self.status = RESOLVED
self.value = value
for(var i = 0; i < self.rejectedCallbacks.length; i++) {
// self.rejectedCallbacks[i] 是个函数。函数调用的时候指向 点 前面的。这里 this 指向点前面的self
// promise 规范 onFulfilled must be called as funtions( with no this value) 严格模式下是 undefined,非严格模式下是 window
// self.rejectedCallbacks[i](value)
var f
f = self.rejectedCallbacks[i]
f(value)
}
}
}
function reject(reson) {
if (self.status === PENDING) {
self.status = REJECTED
self.value = value
for(var i = 0; i < self.rejectedCallbacks.length; i++) {
// self.rejectedCallbacks[i] 是个函数。函数调用的时候指向 点 前面的。这里 this 指向点前面的self
// promise 规范 onFulfilled must be called as funtions( with no this value) 严格模式下是 undefined,非严格模式下是 window
// self.rejectedCallbacks[i](value)
var f
f = self.rejectedCallbacks[i]
f(value)
}
}
}
try {
executor(resolve, reject)
} catch(e) {
reject(e)
}
}
Promise.prototype.then = function(onResolved, onRejected) {
var self = this
// then 的两个参数必须是函数,不然忽略
if (typeof onResolved !== 'function') {
onResolved = function() {}
}
if (typeof onRejected !== 'function') {
onRejected = function() {}
}
var promise2
if (self.status === RESOLVED) {
promise2 = new Promise(function(resolve, reject) {
try {
// resolve(value) 后 执行 then 成功的回调,参数为 value
var x = onResolved(self.value)
// 如果有多个 then,回调函数执行的结果传入下一个 promise
// 如果回调函数 return 一个 promise,等待 promise 执行? 否则将函数 return 结果 x 传入下一个 then
if (x instanceof Promise) {
x.then(resolve, reject)
} else {
resolve(x)
}
} catch(e) {
reject(e)
}
})
}
}