面试官: 你会手写实现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执行的时候会报错.
前端小白, 有错误和不当之处, 忘各位大神指出, 如果感觉小弟码字不易, 麻烦给个👍, 谢谢!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值