Implementieren Sie eine Funktion memoize, die die Ergebnisse von Aufrufen asynchroner Funktionen zwischenspeichert und keine wiederholte Anfrage sendet, wenn der Aufruf mit denselben Argumenten bereits gemacht wurde.
sobes.tech KI
Antwort von 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); // Вернется из кэша
В этом примере кэш хранит промисы, чтобы при повторных вызовах с одинаковыми аргументами не запускать функцию заново, а возвращать уже выполняющийся или выполненный промис.