<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>