主要是为了了解resolve的微任务机制与then的延时绑定。
function Bromise(executor){
let self = this
self.status = 'pending'
//resolve调用的函数
self.onResolve_ = null
//reject调用的函数
self.onReject_ = null
//then的返回值
self.newV_ = null
//传给使用者
executor(resolve,reject)
//触发resolve时,放进微任务队列
function resolve(value){
//这里用宏任务模拟异步
//注意真实情况是用微任务实现的
if(self.status==='pending'){
self.status = 'fulfilled'
setTimeout(()=>{
//得到resolve的返回值,回then函数转化成then的返回值,要是一个Promise,我猜用协程实现的,不会写
//没有then的情况下,没有resolve,不需要调用,也无法调用
if(self.onResolve_!=null)
self.newV_ = self.onResolve_(value)
},0)
}
}
function reject(err){
if(self.status==='pending'){
self.status = 'rejected'
setTimeout(()=>{
if(self.onReject_!=null)
self.onReject_(err)
},0)
}
}
}
//延时绑定
Bromise.prototype.then = function(onResolve,onReject){
this.onResolve_ = onResolve
this.onReject_ = onReject
}
let test = new Bromise((resolve,reject)=>{
console.log(1);
resolve(3)
}).then( value => {
console.log(value);
})
console.log(2);
参考资料:极客时间 《浏览器工作原理与实践》