Вопрос проверяет понимание различий между Promise и Task в контексте обработки ошибок и асинхронного программирования.
Promise и Task — это два подхода к работе с асинхронными операциями, но они имеют фундаментальные различия в обработке ошибок. Promise — это горячая (eager) конструкция: он начинает выполнение сразу после создания, а ошибки обрабатываются через цепочку .catch(). Task, напротив, является ленивой (lazy) конструкцией: он представляет собой описание асинхронной операции, которая запускается только при вызове .run().
В Promise ошибки распространяются по цепочке и могут быть перехвачены в любом месте с помощью .catch(). Это удобно, но может привести к неявному проглатыванию ошибок, если забыть добавить обработчик.
const promise = new Promise((resolve, reject) => {
reject(new Error('Ошибка'));
});
promise
.then(result => console.log(result))
.catch(err => console.error('Поймано:', err.message));
// Вывод: Поймано: ОшибкаTask использует функциональный подход: ошибки обрабатываются как часть конвейера с помощью методов map и chain, что позволяет явно управлять потоком ошибок без побочных эффектов.
const { Task } = require('folktale/concurrency/task');
const task = new Task((resolver) => {
resolver.reject(new Error('Ошибка'));
});
task
.map(result => console.log(result))
.orElse(err => console.error('Поймано:', err.message))
.run();
// Вывод: Поймано: ОшибкаPromise подходит для простых асинхронных сценариев, где важна простота, а Task — для сложных функциональных цепочек, где требуется контроль над побочными эффектами и ленивое выполнение. Выбор зависит от архитектуры проекта и необходимости в композиции асинхронных операций.
Уровень
Рейтинг:
3
Сложность:
6
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию