gpt4 book ai didi

javascript - 如何防止在 node.js 中使用相同的 URL 进行两次调用

转载 作者:搜寻专家 更新时间:2023-11-01 00:28:41 25 4
gpt4 key购买 nike

我要对后端进行 x 次调用。其中一些指向相同的 URL。我正在缓存结果。但我的问题是,如果我使用相同的 URL 立即调用 loadCached 两次(或多次),它实际上也会调用 fetch 两次,因为缓存在第一次获取被解析之前没有 url。因此,缓存仅在一次提取成功完成(=已解决)时才起作用。我如何改进代码以等待第一次提取被解决以避免重复查询?

function loadCached(url) {
let cache = loadCached.cache || (loadCached.cache = new Map());

if (cache.has(url)) {
return Promise.resolve(cache.get(url)); // (*)
}

return fetch(url)
.then(response => response.text())
.then(text => {
cache[url] = text;
return text;
});
}

我正在使用 promise.all() 等待 loadCached 解析。

最佳答案

您需要缓存整个 promise :

function loadCached(url) {
let cache = loadCached.cache || (loadCached.cache = new Map());
let promise;

if (cache.has(url)) {
promise = cache.get(url)
} else {
promise = fetch(url)
cache.set(url, promise)
}

return promise
.then(response => response.text())
}

另请注意,为了使用 map 设置新值,您需要使用set 方法,cache[url] 是不正确的。

关于javascript - 如何防止在 node.js 中使用相同的 URL 进行两次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47354369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com