题目描述
短时间内需要请求多个同类型的资源
期望多个请求合并成一个请求发送
例如:
- 有一个接口其请求路径为 /path
- query有一个id参数支持传一个或者多个id
/path?id=1
/path?id=1,2,3
- 对应的响应格式为
request
方法示例
要求
实现一个 getArticle
方法,每个方法回调最终拿到的是自己需要的内容,且短时间内只发出了一次请求
题目分析
场景分析
常见需要短时间请求多个同类型资源的场景就是资源懒加载的时候
- 如:一个文章列表的中,获取每个展示文章点赞/评论数是单独的一个接口
- 当一次性需要展示多条新闻,那么就要发起多个查询点赞/评论的请求
后端为了减少处理请求的压力,通常会让一个接口支持同时查询多条数据的能力
考点
- 怎么确定这个短时间是多久?
- 其实这里就是考察到了event loop,这个短时间就是指同一个周期内,然后就变成了合并同一个周期内的请求,如何保证在一个周期内,这里就可以用到防抖,让请求在执行宏任务的时候发出
- 如何让每个方法拿到自己需要的数据?
- 这里可以在方法内部用一个map将每个方法的Promise的resolve存起来,每个方法传参的id作为key,在接口响应后,将对应数据通过key取出,然后从map中取出对应Promise的resolve然后执行
resolve(data[id])
即可
- 这里可以在方法内部用一个map将每个方法的Promise的resolve存起来,每个方法传参的id作为key,在接口响应后,将对应数据通过key取出,然后从map中取出对应Promise的resolve然后执行
需要考虑的问题
- 如果多个请求参数是一样的那么,最终请求的参数只有一个
- 如 连续调用两次
getArticle(3)
- 那么 请求的query依旧是
{id:'3'}
而不是{id:'3,3'}
- 并且这两个请求的方法都需要得到响应
- 如 连续调用两次
- 如果这个请求没有被按时响应,不能影响下一次发送
代码实现
测试
模拟实现一个request
测试用例
打印结果
总结
- 考察知识点 event loop,防抖,Promise
- 这是一个很常见的业务问题,考察面试者的动手实践能力
本文正在参与「掘金 2021 春招闯关活动」, 点击查看
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!