Sobes.tech
Middle

Realizējiet memoize funkciju, kas kešē rezultātus no asinhronajām funkciju izsaukumiem un neizsūta atkārtotus pieprasījumus, ja tas pats izsaukums ar tiem pašiem argumentiem jau ir veikts.

sobes.tech AI

Atbilde no 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); // Вернется из кэша


В этом примере кэш хранит промисы, чтобы при повторных вызовах с одинаковыми аргументами не запускать функцию заново, а возвращать уже выполняющийся или выполненный промис.