手写 Promise.race
思路:
- Promise.myRace 知道要在 Promise 上写而不是在原型上写
- 返回异步 new Promise 数据
- forEach 遍历:子项通过 then 获取异步结果
- 成功:立即返回第一个成功
- 失败:立即返回第一个失败
- forEach 遍历:子项通过 then 获取异步结果
/**
* Promise.race(myRace)返回值
* - 第一个成功
* - 第一个失败
*/
Promise.myRace = (list) => {
return new Promise((resolve,reject)=>{
list.forEach((item,index)=>{
item.then(data=>{
resolve(data)
},reason=>{
reject(reason)
})
})
})
}
使用方法:
var p1 = Promise.resolve(
setTimeout(() => {
1
}, 100)
)
var p2 = Promise.reject(2)
var p3 = Promise.resolve(3)
Promise.myRace([p1, p2, p3]).then(values => {
console.log(values)
})