问题描述
- 在之前的手写
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