1. 无链式then
// 先定义三个常量表示状态
var PENDING = 'pending';
var FULFILLED = 'fulfilled';
var REJECTED = 'rejected';
function MyPromise(fn) {
this.status = PENDING; // 初始状态为pending
this.value = null; // 初始化value
this.err = null; // 初始化err
this.onFulfilledCallbacks = [] // Fulfilled回调数组
this.onRejectedCallbacks = [] // Rejected回调数组
// 存一下this,以便resolve和reject里面访问
var that = this;
// resolve方法参数是value
function resolve(value) {
if(that.status === PENDING) {
that.status = FULFILLED;
that.value = value;
// 执行从PENDING到Fulfill的方法,如果MyPromise里没有异步任务,同步resolve,这里应该是空的
that.onFulfilledCallbacks.forEach(cb => {
cb(value)
})
}
}
// reject方法参数是err
function reject(err) {
if(that.status === PENDING) {
that.status = REJECTED;
that.err = err;
// 执行从PENDING到Reject的方法
tha