Ответ
Генераторы Redux-Saga сложны из-за их асинхронной природы и необходимости понимания концепций генераторов в JS. Они требуют ручного управления потоком выполнения через yield, что усложняет отладку и чтение кода. Также необходимо запоминать эффекты (например, call, put), которые абстрагируют сайд-эффекты, но добавляют уровень абстракции.
Пример:
function* fetchUser(action) {
try {
const user = yield call(api.fetchUser, action.payload.userId);
yield put({ type: 'USER_FETCH_SUCCEEDED', user });
} catch (e) {
yield put({ type: 'USER_FETCH_FAILED', message: e.message });
}
}
Проблемы:
- Кривая обучения (генераторы + эффекты)
- Избыточность для простых задач
- Сложность тестирования (нужно мокать эффекты)
Ответ 18+ 🔞
А, генераторы в Redux-Saga, да? Ну это ж классика, блядь! Ёперный театр, честно говоря.
Смотри, в чём прикол, а прикол в том, что это как будто ты пытаешься объяснить квантовую механику мартышке. С одной стороны, мощно, с другой — нихуя не понятно с первого раза.
Вот смотри на этот код, будто он простой:
function* fetchUser(action) {
try {
const user = yield call(api.fetchUser, action.payload.userId);
yield put({ type: 'USER_FETCH_SUCCEEDED', user });
} catch (e) {
yield put({ type: 'USER_FETCH_FAILED', message: e.message });
}
}
Вроде бы логика на лицо: вызвали, получили, отправили успех, если словили ошибку — отправили провал. Ан нет, сука! Тут подвох.
Проблема номер раз — это сами генераторы. Это не просто функции, это, блядь, такие функции-зомби, которые можно поставить на паузу, а потом разбудить и сказать: «Продолжай, сука, с того же места!». yield — это как крик «СТОП, блядь, я тут подожду, пока этот асинхронный трэш завершится». И мозг сначала скипает, пытаясь понять, кто, когда и зачем эту паузу делает.
Проблема номер два — эти ваши эффекты. call, put. Это ж надо запомнить, что call — это «эй, выполни-ка эту штуку», а put — это «а теперь швырни этот экшен в редюсер, как гранату». А ещё там take, fork, select — овердохуища всего! Получается, что ты пишешь не на чистом JS, а на каком-то своём диалекте, который придумали сагисты. Чих-пых тебя в сраку, зачем столько абстракций-то?
И самое весёлое — тестирование. Хочешь протестировать эту простыню? Приготовься, блядь, к цирку с конями! Надо все эти yield замовкивать, чтобы они возвращали тестовые данные, и следить за порядком, а то один yield перепутаешь — и всё, пиздец, тест падает, а ты три часа ищешь, где накосячил. Терпения ноль, ебать!
Короче, инструмент мощный, спору нет. Для сложных сценариев, где сайд-эффекты пляшут гопак, — самое то. Но для того, чтобы просто юзера получить с сервака? Да это как из пушки по воробьям, ей-богу. Слишком много церемоний, слишком много магии, которую сначала полгода изучать надо. Волнение ебать, когда с этим работать начинаешь.