Size: a a a

2021 June 18

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
в нём выбрасывается ошибка если вызов эффекта не требуется
источник

IK

Igor Kamyshev in ☄️ effector
Уууууу
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
но техническое обоснование этого довльно неожиданное
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
прям реально неожиданное, мы встали перед этим фактом уже после релиза)
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
когда мы говорим об обычных вычислениях, то ошибки в чистых функциях означают, что дальше процесс вычисления не пойдёт, то есть всё прозрачно — ну нет вычисления и нет

const e = createEvent()
const $a = createStore(0)
const $b = $a.map(x => x + 1)

$a.on(e, (x, fail) => {
 if (fail) throw Error()
 return x + 1
})

e()
// => $a = 1; $b = 2

e(true)
// => нет реакции, но всё консистентно


изначально предполагалось, что mapParams — такой же
источник

K

Karvackyy Roma in ☄️ effector
а как книжка называется если не секрет?)
источник

Egor Гуща in ☄️ effector
Дизайн привычных вещей
источник

АБ

Александр Бакиматов... in ☄️ effector
дизайн привычных вещей
источник

ei

export default - зло... in ☄️ effector
дизайн привычных вещей
источник

K

Karvackyy Roma in ☄️ effector
источник

Egor Гуща in ☄️ effector
почему просто не result например, интуитивно должно быть понятно?
источник

АХ

Александр Хороших... in ☄️ effector
Бред или нет:

Кажется, если сделать
sample({
 source,
 clock,
 filter,
 fn,
 target
})

- то можно будет оставить guard как алиас и со временем депрекейтнуть его

Т.е. +1 поле у сэмпла и да, нужно будет помнить, что fn вызывается отдельно после фильтра
Но -1 целый оператор, с которым нужно отдельно разбираться и проводить параллели с сэмплом

И в итоге апи в целом стало меньше и его проще в голову загрузить

Или это не так работает? 🤔
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
на практике же выяснилось, что отличается как ожидаемое людьми поведение, так и реакция системы в целом:

const fx = createEffect(() => 1)

const att = attach({
 effect: fx,
 mapParams(fail) {
   if (fail) throw Error()
 }
})

const req1 = att()
// Promise {fullfilled: 1}

const req2 = att(true)
// Promise {pending}

как итог, второй промис зависает в бесконечности, потому что mapParams не выполнился до конца. из этого следует, что ошибки из mapParams обязаны попадать в fail аттачнутого эффекта. а это означает, что mapParams — функция с сайд-эффектами

целая теорема получилась)
источник

Egor Гуща in ☄️ effector
ты забыл типы и тест кейсы и тесты типов, я теперь понимаю через что Дима проходит, когда думает о добавлении фичи
хватает нюансов
источник

DS

Dmitriy Shuleshov in ☄️ effector
источник

DS

Dmitriy Shuleshov in ☄️ effector
Проблема не в "нужно помнить" а в потенциально необходимых кейсах. Не хотелось бы добавить сложности апи и потом понять что остались непокрытые эджкейсы. Это будет привнесеной сложностью
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
в плане типов для начала достаточно просто поверхностного обзора ситуаций, чтобы убедиться, что идея в принципе типизируется
источник

DS

Dmitriy Shuleshov in ☄️ effector
Условно расширить семпл и потом обнаружить что в каких то кейсах все равно прийдется использовать композицию семпл + гард
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
в целом можно резюмировать, что pre-filter реально не нужен, но это не избавляет от необходимости выбирать понятное имя для post-filter
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
я в принципе понимаю о чём он)
источник