Promise.myAll = iterator => {
if (!iterator[Symbol.iterator]) {
throw TypeError('iterable variable is required')
}
return new Promise((resolve, reject) => {
try {
let arr = Array.from(iterator);
let res = [];
let count = 0;
for (let i = 0; i < arr.length; i++) {
Promise.resolve(arr[i]).then(data => {
count++;
res[i] = data;
if(count === arr.length) {
resolve(res);
}
}, e => reject(e))
}
} catch(e) {
reject(e);
}
})
}
Promise.race()
Promise.myRace = function (iterator) {
if (!iterator[Symbol.iterator]) {
throw TypeError('iterable variable is required')
}
return new Promise((resolve, reject) => {
try {
let it = iterator[Symbol.iterator]();
let res;
while (true) {
res = it.next();
if (res.done) break;
Promise.resolve(res.value).then(resolve, reject);
}
} catch(e) {
reject(e);
}
})
}