面试官: 你会手写实现PromiseA+么? 小白的我: 这……, 要不我试试(系列三

问题描述

  • 在之前的手写Promise中, 我们已经完成了resolve,reject,then,all方法.下面我们继续完成一下race等方法.

解决思路

  • 首先race方法, 和名称一样, 比赛嘛, 那就是看第一名喽?, 所以, race的处理逻辑就是, 谁第一个执行完成, 就输出那个. 其他的不管.
  • 下面我们就来初步实现一下race这个方法.

初步实现

  • 定义一个类方法race, 传递的参数是一个数组类型, 如果不是数组类型就需要进行报错提示.
  • 然后, 遍历这个数组中的对象, 然后, then执行它们, 如果有一个输出, 就直接结束.
race(promises) {
   return new Promise((resolve,reject) =>{
   // 坑1: 这里需要对传入的参数进行一下类型的判断
       if(!Array.isArray(promises)){
          return reject(new Error('参数必须是一个数组类型!'))
       }
       Promise.forEach(promise =>{
       // 坑2: 这里需要用Promise.resolve处理一下, 防止当前遍历对象不是promise类型
           Promise.resolve(promise).then(data=>{
               resolve(data)
           }, err=>{
               reject(err)
           })
       })
   })
}

复制代码

总结

  • 其实race的实现比较简单, 就是在第一个对象处理完成之后, 就结束处理就好, 但是里面需要注意的两个点是, 1. 需要判断一下传入参数的类型, 看是不是数组类型. 2. 需要用resolve方法对遍历的对象处理, 不然, 如果传入的不是promise类型,在then执行的时候会报错.

前端小白, 有错误和不当之处, 忘各位大神指出, 如果感觉小弟码字不易, 麻烦给个?, 谢谢!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享