编辑代码


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)
            })
        }
    })
}