原理:
Promise.race
方法将多个Promise实例,包装成一个新的Promise实例。
const p = Promise.race([p1,p2,p3])
只要p1
、p2
、p3
之中有一个实例率先改变状态,p
的状态就跟着改变。那个率先改变的Promise
实例的返回值,就传递给p
的回调函数。
实现代码:
Promise._race = promises => new Promise((resolve,reject) =>{
promises.forEach(promise => {
promise.then(resolve,reject)
})
})
测试代码:
// 通过定时器来控制那个状态率先改变
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
}, 600)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('failed')
}, 500)
})
const p = Promise._race([p1,p2])
p.then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
输出结果:
[Running] node "d:\VSCode\workspace\刷题\ES6\Promise\race.js"
failed
[Done] exited with code=0 in 0.882 seconds