class MyPromise{
callbacks = [];
constructor(fn) {
fn(this._resolve.bind(this));
}
then(onFulfilled) {
this.callbacks.push(onFulfilled);
}
_resolve(value) {
setTimeout(() => {
this.callbacks.forEach(fn => fn(value));
});
// this.callbacks.forEach(fn => fn(value));
}
}
// 应用
let p = new MyPromise(resolve => {
setTimeout(() => {
console.log('done');
resolve('5秒');
}, 5000);
}).then((tip) => {
console.log(tip);
})
- 首先构建一个 Promise类
在类中定义好三个方法
构造方法 ==> 构造方法的传参必须是一个函数,
成功之后处理的resolve方法
then方法
注意:
.then方法只是负责将方法推送到Promise中, 不负责具体的执行
构造方法中执行 构造实例化时传进来的函数, 该函数一般会传 resolve参数和 reject
该函数在执行的过程中会传入 Promise类本身定义 resolve方法, 该方法才是具体的 .then函数中 具体的执行程序
由此可知, 在执行 _resolve方式时加入 try ... catch... 错误执行的程序会执行 _reject()
为了能在 .then 之后才执行 _resolve程序, 该程序本身需要加入 setTimeout(( ... )=>{}) 延迟机制
网友评论