需要注意的有:Promise.all返回的顺序和输入的顺序一样。
Promise.all
Promise.myAll = function (arr) {
let result = [];
let num = 0
return new Promise((resolve, reject) => {
for (let i = 0; i < arr.length; i++) {
arr[i].then(res => {
result[i] = res;
num++;
if (num === arr.length) resolve(result);
}, rej => {
reject(rej)
})
}
})
}
//测试
const p1 = new Promise((res, rej) => {
setTimeout(() => {
res('任务1成功')
}, 1000);
})
const p2 = new Promise((res, rej) => {
setTimeout(() => {
res('任务2成功')
}, 500);
})
const p3 = new Promise((res, rej) => {
setTimeout(() => {
res('任务3失败')
}, 2000);
})
Promise.myAll([p1, p2, p3])
.then(res => {
console.log(res);
}).catch(err => {
console.log(err);
})
Promise.race
Promise.myRace = function (arr) {
return new Promise((resolve, reject) => {
arr.forEach((item, index) => {
item.then(res => {
resolve(res)
}, rej => {
reject(rej)
})
})
})
}
//测试
const p1 = new Promise((res, rej) => {
setTimeout(() => {
res('任务1成功')
}, 1000);
})
const p2 = new Promise((res, rej) => {
setTimeout(() => {
res('任务2成功')
}, 50000);
})
const p3 = new Promise((res, rej) => {
setTimeout(() => {
rej('任务3失败')
}, 5000);
})
Promise.myRace([p1, p3, p2]).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
})
记录记录!