Вопрос проверяет понимание функционального программирования и умение соотносить абстрактные концепции с конкретными реализациями в JavaScript, такими как Promise.
Монада — это концепция из функционального программирования, которая представляет собой контейнер для значения. Она позволяет оборачивать значение и определять, как функции могут применяться к этому значению, сохраняя контекст (например, асинхронность, возможность ошибки). Монада должна удовлетворять трём законам: левая и правая идентичность, ассоциативность. На практике это означает, что у монады есть два основных метода: return (или of) для помещения значения в контекст и bind (или flatMap) для применения функции, возвращающей монаду.
Promise в JavaScript можно рассматривать как монаду для асинхронных операций. Он оборачивает значение, которое может быть доступно в будущем. Метод then выполняет роль bind: он принимает функцию, которая возвращает новый Promise, и автоматически разворачивает вложенные Promise. Это позволяет создавать цепочки асинхронных операций без callback hell.
// Пример цепочки Promise как монады
const fetchUser = (id) => Promise.resolve({ id, name: 'Alice' });
const fetchPosts = (user) => Promise.resolve([{ title: 'Post 1' }]);
fetchUser(1)
.then(user => fetchPosts(user))
.then(posts => console.log(posts));
// Результат: [{ title: 'Post 1' }]Монады широко используются в функциональных языках (Haskell, Scala) для управления побочными эффектами, такими как ввод-вывод, обработка ошибок (Maybe, Either) или состояние. В JavaScript Promise — это практическая реализация монады для асинхронности. Понимание монад помогает писать более чистый и композируемый код, особенно при работе с цепочками операций. Вывод: используйте Promise как монаду для упрощения асинхронного кода, но не злоупотребляйте абстракциями в простых случаях.
Уровень
Рейтинг:
3
Сложность:
7
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию