Promise 最简单的实现
程序员文章站
2022-06-15 13:53:43
...
<script type="text/javascript">
//自定义个promise类 ,就这里面写
function P(executer){
// 类里的方法,函数实例
const self = this;
self.data = null;// 存放结果值
self.callbacks = [];//存放异步操作回到的方法
/**
callbacks 里面存放的就是这个值
{
onResolved,onRejected
}**/
function resolve(value){
self.data = value;
// 真正去执行对结果的异步回调函数,走这个逻辑!
setTimeout(function(){
if(self.callbacks.length>0){
// 在这里应该遍历去执行
self.callbacks.forEach(item=>{
item.onResolved(self.data);
});
}
},1000);
}
function reject(reason){
self.data = reason;
setTimeout(function(){
if(self.callbacks.length>0){
// 在这里应该遍历去执行
self.callbacks.forEach(item=>{
item.onRejected(self.data);
});
}
},1000);
}
// 执行执行器操作
//
try{
// 这玩意是一个同步的执行器
executer(resolve,reject);
// 如果36行正确,则去执行 onResolved,onResolved)
}catch(err){
reject(err);
}
}
// 类原型上的方法,可以通过对象去调用
P.prototype.then = function(onResolved,onRejected){
this.callbacks.push({onResolved,onRejected});
}
let p1 = new P((resolve,reject)=>{
// throw new Error("sdfsd");
reject(999);
});
p1.then((value)=>{
console.log(value);
},
(reason)=>{
console.log(reason);
}
);
// 这个时候我们看下结果,他会不会
</script>
上一篇: 50个优秀经典PHP算法大集合 附源码
下一篇: Java网络编程UDP实现多线程在线聊天
推荐阅读