我们已经实现了自动把同一时刻的请求合并成多个 fetch,并统一渲染。
存在问题
但是又遇到了一种新的场景:就是不同组件,发送相同参数的相同请求时,这在原来的场景下,还是会发两个相同的请求。
而想要优化,只能把请求移到外层,通过参数分别透传给两个组件。
那,我们这个 fetch 组件能不能直接把这个工作给做了呢,让用户自由地发送请求,而由 fetch 组件来做优化呢?
具体实现
我们来思考一下,这个思路,就是把请求删减为一个,而把成功处理和失败回调变成多个,就可以啦。
细节上来说的话,就是遇到同名且相同参数的请求时,原本会作增加新请求操作,而现在直接跳过,同时把回调函数加到对应的成功及失败回调中。
那我们先来第一步:
回调变为数组
首先是增加一些新的定义:
1 | /** |
然后便是处理这些逻辑的地方:
1 | let batchList: IBatchMap[] = []; // 多个batch请求组成的数组 |
跳过同参数请求
第二步便是在 addRequest 增加跳过逻辑和增加回调操作:
1 | /** |