这个就比较简单了,返回最先执行完的那一个promise就OK
思路:
:::success
race最后也是返回一个Promise对象,并且then之后,拿到的最先执行完毕的Promise结果
所有我们直接 返回一个Promise,在内部遍历PromiseArr,然后then就行
:::
代码
Promise._race = function (promiseArr) {
return new Promise((resolve, reject) => {
promiseArr.forEach(item => {
// 如果不是promise,则需要转化为promise
Promise.resolve(item).then(
val => resolve(val),
err => reject(err)
)
})
})
}
// test
let promise1 = new Promise((resolve, reject) => {
setTimeout(() => resolve(111), 2000)
})
let promise2 = new Promise((resolve, reject) => {
setTimeout(() => resolve(222), 1500)
})
let promise3 = new Promise((resolve, reject) => {
setTimeout(() => resolve(333), 2500)
})
let promiseArr = [promise1, promise2, promise3]
Promise._race(promiseArr).then((val) => {
console.log(val)
})