Что такое allSettled в Effector

Ответ

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 — это когда тебе надо сделать кучу дел одновременно, а потом разобраться, что из этого вышло. Удобно, практично, без сюрпризов в виде внезапного падения всего приложения. Рекомендую, ёпта.