接收一个Promise数组,并返回一个新的Promise,当任何一个Promise成功或失败时,将其结果传递给返回的Promise。
关键点:Promise包裹for循环,每个子Promise都执行并且执行后就调用父级的resolve, reject
function promiseRace(promises) {
return new Promise((resolve, reject) => {
promises.forEach(p => {
// 让每个任务都变成Promise任务。等他们任何一个执行完就会走到then和catch结束
Promise.resolve(p).then(resolve).catch(reject);
})
});
}
给几个测试用例
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, 1);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 2);
});
promiseRace([promise1, promise2]).then((value) => {
console.log(value) // 2
});
promiseRace([promise1, promise2, 3]).then((value) => {
console.log(value) // 3
});