Skip to main content

手写 Promise.race

思路:

  1. Promise.myRace 知道要在 Promise 上写而不是在原型上写
  2. 返回异步 new Promise 数据
    • 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)
})