Sobes.tech
Middle

Asinxron funktsiya chaqiruvlarining natijalarini keshga oladigan va ayni argumentlar bilan chaqirish allaqachon amalga oshirilgan bo'lsa, takroriy so'rov yubormaydigan memoize funktsiyasini amalga oshiring.

sobes.tech AI

AIdan javob

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


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