Допустим, я должен последовательно выполнить 4 вызова API.Когда вызов успешно заканчивается и возвращает ответ, я сохраняю результат этого вызова в массиве «кеш».Перед выполнением каждой выборки я хочу проверить, был ли ранее выбран url, проверив URL в кеше. Если он присутствует в кеше, я просто укажу результат на console.log, если нет, я вызову API.
В настоящее время у меня есть что-то похожее на этот код:
const requests = [url1, url2, url3, url2]
const cache = []
function getData(url) {
return fetch(url)
.then(function(response) {
return response.json()
})
}
function checkCache(url) {
return cache.filter(function (item) {
return item.url === url
})
}
function callApi(url) {
const cacheData = checkCache(url)
console.log(cacheData)
if (cacheData.length > 0) {
console.log (cacheData)
}
else {
getData(url).then(function (data) {
console.log(data)
cache.push(data)
})
}
}
requests.forEach(function(url) {
callApi(url)
})
Проблема в том, что условие проверки для 4 URL-адресов оценивается до того, как выборка была завершена хотя бы один раз, поэтому кэшпусто, и вывод выглядит примерно так:
[] //checks the cache 4 times and its empty x 4
[]
[]
[]
data //calls the api
data //calls the api
data //calls the api
data //calls the api, but this data should come from the cache since the url2 have been already called
Как я могу справиться с этим?