# 2018.11.23
# 背景
昨天做CodeReview遇到如下场景:
页面中有组件A和组件B,同时请求接口X获取配置数据返回Promise(注1)
抓包发现会请求两次,浪费性能,有没有办法从请求层面处理?
小伙伴M的处理方法是
在请求之前打个标记为已请求hasRequest,发起第 1 个请求
第 2 个请求进来发现已请求,EventBus注册全局事件,就退出
等待第 1 个请求完毕后,resolve返回数据,触发全局事件
# 分析
上述的做法好处是:
- 简单直接
不好的地方:
EventBus的引入增加代码阅读成本
第 1 个请求成功后resolve后,执行全局事件触发,语义上不够清晰
对于reject没有处理,如果reject处理需要另外注册事件或加字段或加额外判断
# 可能的优化
利用resolve本身是个函数的性质,参考以前多个callback存放数组的处理
可以把多次相同条件的promise的resolve放到一个resolveList数组中,Promise结束后按push的顺序调用resolve