以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!
BFE.devAI解答 - JavaScript 代码题
101. 合并相同的API请求
解题思路:
- 调用
createGetAPIWithMerging(getAPI)
来创建一个合并请求的api方法getAPIWithMerging
- 当请求时,把请求的参数用 JSON 编码来作为对象的 key,在一个 object 中记住这个请求,使用该请求的一个ID作为key, getAPI 的返回 promise 被存下来。
- 下一次调用同样的api方法的时候,只需要检查缓存中是否有相关的请求,则直接返回相应的 promise,没有则新建一个 promise,把它和请求缓存起来
- 下一次相同的请求发生时,能够检查相等的对象拥有相同的key,返回结果环节可以直接从相对应的 promise 中找到响应结果,而无需发出新请求。
在代码中,使用一个对象来存下请求信息和请求相应的 promise,实现缓存机制
每次请求时,产生一个针对该请求的唯一id。我们将 path
和 config
使用 JSON 编码以形成一个字符串 key
将其作为键存储在一个 cache
对象中,对于新创建的请求,如果在 1000ms 时间以内它的参数 key
相等,则直接返回接收到的回调函数的 promise;否则,执行实际的 GET 请求并缓存响应。
为了防止内存泄漏,我们还提供了一个 clearCache
方法来删除该缓存对象。
看下面的解答: