# 2018.11.23

# 背景

昨天做CodeReview遇到如下场景:

  • 页面中有组件A和组件B,同时请求接口X获取配置数据返回Promise(注1)

  • 抓包发现会请求两次,浪费性能,有没有办法从请求层面处理?

小伙伴M的处理方法是

  1. 在请求之前打个标记为已请求hasRequest,发起第 1 个请求

  2. 第 2 个请求进来发现已请求,EventBus注册全局事件,就退出

  3. 等待第 1 个请求完毕后,resolve返回数据,触发全局事件

# 分析

上述的做法好处是:

  • 简单直接

不好的地方:

  • EventBus的引入增加代码阅读成本

  • 第 1 个请求成功后resolve后,执行全局事件触发,语义上不够清晰

  • 对于reject没有处理,如果reject处理需要另外注册事件或加字段或加额外判断

# 可能的优化

利用resolve本身是个函数的性质,参考以前多个callback存放数组的处理

可以把多次相同条件的promise的resolve放到一个resolveList数组中,Promise结束后按push的顺序调用resolve