const p1 = new Promise((res, rej) => {
setTimeout(() => {
res('p1')
}, 4000)
})
const p2 = new Promise((res, rej) => {
setTimeout(() => {
res('p2')
}, 2000)
})
const p3 = new Promise((res, rej) => {
setTimeout(() => {
res('p3')
}, 3000)
})
// 原生实现
Promise.race([p1, p2, p3]).then((res) => {
console.log(res);
})
myRace([p1, p2, p3]).then((res) => {
console.log('-->', res)
}).catch((error) => {
console.log('-->', error)
});
function myRace(arr) {
return new Promise((resolve, reject) => {
const isArray = Object.prototype.toString.call(arr).slice(8, 13) === 'Array';
console.log(isArray)
if(!isArray) {
reject('不是array')
}
for(let i = 0 ; i < arr.length; i++) {
Promise.resolve(arr[i]).then((result) => {
resolve(result);
}).catch((error) => {
reject(error)
})
}
})
}