all()
class MyPromise {
static all(array) {
let result = [], index = 0;
return new MyPromise((resolve, reject) => {
function addData(i, v) {
result[i] = v;
index++;
if (index === array.length) {
resolve(result)
}
}
for (let i = 0; i < array.length; i++) {
let item = array[i]
if (item instanceof MyPromise) {
item.then(value => addData(i, value), reject)
} else {
addData(i, item)
}
}
})
}
}
Promise.all(["Jackson", "Yee"]).then((data) => {
console.log(data);
})
race()
class MyPromise {
static race(array) {
return new Promise((resolve, reject) => {
for (let i = 0; i < array.length; i++) {
let item = array[i]
if (item instanceof MyPromise) {
item.then(resolve, reject)
} else {
resolve(item)
}
}
})
}
}
function time(time) {
return new Promise(resolve => {
setTimeout(() => {
resolve(time)
}, 1000 * time)
})
}
Promise.race([time(1), time(2), time(3)]).then(res => console.log(res))
any()
class MyPromise {
static any(arr) {
return new Promise((resolve, reject) => {
let result = [], index = 0;
let len = arr.length;
function func(i, err) {
result[i] = err;
index++;
if (index === len) {
reject(result)
}
}
for (let i = 0; i < len; i++) {
let item = arr[i]
if (item instanceof Promise) {
item.then(resolve, err => func(i, err))
} else {
resolve(item)
}
}
})
}
}
function cra(time, type) {
return new Promise((resolve, reject) => {
setTimeout(() => {
type && resolve(time)
!type && reject(time)
}, 1000 * time)
})
}
MyPromise.any([cra(2, false), cra(4, true), cra(6, false)]).then(res => {
console.log(res);
}, err => {
console.log(err);
})