Реализуй функцию memoize, которая кэширует результаты вызовов асинхронной функции и не отправляет повторный запрос, если вызов с теми же аргументами уже был сделан.
Answer from AI
sobes.tech AI
javascript function memoize(asyncFunc) { const cache = new Map();
return async function(...args) { const key = JSON.stringify(args); if (cache.has(key)) { return cache.get(key); } const promise = asyncFunc(...args); cache.set(key, promise); try { const result = await promise; // Можно обновить кэш результатом, если нужно хранить именно результат, а не промис return result; } catch (error) { cache.delete(key); // Удаляем из кэша при ошибке, чтобы повторить вызов throw error; } }; }
// Пример использования:
async function fetchData(id) {
console.log('Fetching', id);
return new Promise(resolve => setTimeout(() => resolve(Data for ${id}), 1000));
}
const memoizedFetch = memoize(fetchData);
memoizedFetch(1).then(console.log); // Запрос отправится memoizedFetch(1).then(console.log); // Вернется из кэша
В этом примере кэш хранит промисы, чтобы при повторных вызовах с одинаковыми аргументами не запускать функцию заново, а возвращать уже выполняющийся или выполненный промис.