class Promise{
constructor (fn){
const _this = this;
//声明一个等待的队列(重点)
this._queue = [];
this._succ_res = null;
this._error_res = null;
this.status = "";
fn(function(...arg){
_this._succ_res = arg;
_this.status = "success";
_this._queue.forEach(json => {
json.fn1(...arg);
});
},function(...arg){
_this._error_res = arg;
_this.status = "error";
_this._queue.forEach(json => {
json.fn2(...arg);
})
})
}
then(fn1, fn2){
if(this.status == "success"){
fn1(this._succ_res);
} else if(this.status == "error") {
fn2(this._error_res);
} else {
this._queue.push({fn1, fn2});
}
}
}
Promise.all = function (arr){
let resArr = [];
return new Promise((resovle, reject) => {
let i =0;
next();
function next(){
arr[i].then(res =>{
resArr.push(res);
i++
if(i == res.length) {
resolve(resArr);
} else {
next();
}
}, error =>{
reject(error);
})
}
})
}