Ответ
allSettled в Effector — это комбинатор, который позволяет запускать несколько эффектов параллельно и дожидаться завершения всех из них (независимо от успешности). Возвращает массив объектов с результатами каждого эффекта.
Пример:
import { allSettled, createEffect } from 'effector';
const fetchUser = createEffect(/*...*/);
const fetchPosts = createEffect(/*...*/);
// Запуск эффектов
const results = await allSettled({
user: fetchUser,
posts: fetchPosts
});
// results будет содержать:
// {
// user: { status: 'done', value: ... } | { status: 'fail', error: ... },
// posts: { status: 'done', value: ... } | { status: 'fail', error: ... }
// }
Ключевые особенности:
- Не прерывается при ошибке в одном из эффектов
- Возвращает объект с результатами всех эффектов
- Полезен, когда нужно выполнить несколько независимых запросов
Ответ 18+ 🔞
Слушай, а вот этот allSettled в Effector — это вообще огонь, такая удобная штука, ей-богу. Представь себе: тебе надо запустить кучу эффектов сразу, параллельно, и чтобы они там друг другу не мешали, как соседи по коммуналке.
И главное — тебе похуй, упадут они или нет! Ну то есть не совсем похуй, но суть в том, что если один из них накроется медным тазом, остальные-то не прервутся, будут себе спокойно работать. Это ж как в жизни: один мудак опоздал на встречу, а остальные-то уже сидят, пиво пьют, не будут же они из-за него расходиться, верно?
Вот смотри, как это выглядит, реально просто:
import { allSettled, createEffect } from 'effector';
// Допустим, один эффект тянет пользователя
const fetchUser = createEffect(/*...*/);
// А второй — его посты (которые он, скорее всего, уже удалил, стыдясь)
const fetchPosts = createEffect(/*...*/);
// Запускаем всё это великолепие
const results = await allSettled({
user: fetchUser,
posts: fetchPosts
});
И что мы получаем в results? А получаем мы объект, где для каждого ключа — свой результат. И каждый результат — это не просто данные, а целая история с моралью: либо { status: 'done', value: ... } (всё заебись, герой получил свой приз), либо { status: 'fail', error: ... } (пиздец, всё пропало, но мы хотя бы знаем, почему).
Получается, ты всегда в курсе, что случилось с каждым участником этой гонки. Один запрос сдох с ошибкой 404 (пользователь-то удалился, хитрая жопа), а второй — выполнился и принёс тебе пустой массив постов. И ты это всё видишь, обрабатываешь и не психуешь, что всё разом наебнулось.
Короче, allSettled — это когда тебе надо сделать кучу дел одновременно, а потом разобраться, что из этого вышло. Удобно, практично, без сюрпризов в виде внезапного падения всего приложения. Рекомендую, ёпта.