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);
})
}
})
}