Sobes.tech
Middle

Асинхрон функция чакыруларынын натыйжаларын кэшке сактаган жана ошол эле аргументтер менен чакыруу мурда жасалган болсо, кайталанган суроо жөнөтпөгөн memoize функциясын ишке ашырыңыз.

sobes.tech AI

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


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