Size: a a a

Scala User Group

2020 August 17

AD

Apache DOG™ in Scala User Group
Nikita🌈🦄🌈🇺🇦🇨🇦
привет, ковыряюсь сейчас в ZIO. Есть такой вопрос:
у меня есть несколько вызовов функций, которые я засунул в эффект и просто вызываю их последовательно. Любая из них может бросить эксепшен (не чистые, да, могу их пооборачивать). После выполнения эффекта я хочу получить или саксес, или обработать эксепшен\ошибку\етс и *получить степ, который ошибку сделал*  для её обработки (вызвать коллбек на ней с фолаут хендлером).
Вопрос - как проще всего запилить такую функциональность? Пока думаю позаворачивать вызовы в Ior из котов, в котором будет лежать айзер с ошибкой и последним успешным стейтом или просто пустой айзер с саксесом и последний степ.
Есть ли варианты получше? Каждый степ оборачивать как-то влом :)
у зио есть одна из дырок куда можно засунуть ошибку, можно сделать АДТшку ошибки и в ней на каждую функцию по виду ошибки(т.е. доменные ошибки) тогда по типу ошибки можно будет узнать где зафейлилось.
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
такая идея тоже была
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
Oleg ℕizhnik
Что значит "получить степ" и что значит "вызвать коллбек на ошибке с фолаут хендлером", нужно ли продолжать выполнение после ошибки, или нет
короче надо чтобы эффект последний успешний степ вернул
источник

Oℕ

Oleg ℕizhnik in Scala User Group
а что с первым упавшим делать?
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
я его обработал, и если нужно - перезапустил или другую логику запустил
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
он и есть первый
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
сек
источник

Oℕ

Oleg ℕizhnik in Scala User Group
нужна scastie
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
def execute() = for {
   l <- login
   t <- test
   l_out <- logOut

 } yield (...)
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
типа такого
источник

Oℕ

Oleg ℕizhnik in Scala User Group
ну вот упал login
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
ага, тогда нужно перезапустить
источник

Oℕ

Oleg ℕizhnik in Scala User Group
как получит l
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
упал тест - вызвать другой
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
упал логаут - забить
источник

Oℕ

Oleg ℕizhnik in Scala User Group
а как l_out получить, чтобы дальше пойти
источник

Oℕ

Oleg ℕizhnik in Scala User Group
или дальше не нужно идти
источник

AD

Apache DOG™ in Scala User Group
Nikita🌈🦄🌈🇺🇦🇨🇦
короче надо чтобы эффект последний успешний степ вернул
можно засунуть в ошибку же.
источник

AD

Apache DOG™ in Scala User Group
тогда "вернет"
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Nikita🌈🦄🌈🇺🇦🇨🇦
ага, тогда нужно перезапустить
сделать ретрай, но сохранить информацию, что была ошибка?
источник