Асинхронность. ПродолжениеИспользование промисовeasy

Асинхронная мемоизация

Изучая функциональное программирование, мы реализовывали функцию-декоратор memo

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

Реализуйте функцию asyncMemo, которая работает аналогично для асинхронных функций.

Для простоты можно считать, что функция, передаваемая в asyncMemo, принимает ровно один аргумент и всегда возвращает промис.

const double = async x => x * 2; const mDouble = asyncMemo(double); mDouble(10).then(x => console.log(x)); // вызывается double, выводится 20 mDouble(10).then(x => console.log(x)); // double повторно не вызывается, но тоже выводится 20