Size: a a a

2021 March 24

MK

Maxim Koylo in ☄️ effector
🚀🔬 🚀🔬🚀🔬
поэтому если кейс выходит за кейсы домена — переключаемся на явное описание
а ты про то что если нам нужна кастомная обработка без дефолтной то нужно этот эффект вынести из домена?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Maxim Koylo
а ты про то что если нам нужна кастомная обработка без дефолтной то нужно этот эффект вынести из домена?
ага, либо задуматься, действительно ли у нас эти эффекты можно объединить под доменом (например фронтенд-разработчиков нельзя объединить под доменом «использовали в жизни date-fns»)

поэтому вместо домена я и предложил явный форвард: именно эти эффекты будут пересылать ошибки в sentry
источник

TG

Timofey Goncharov in ☄️ effector
Timofey Goncharov
сделал репродюс моей проблемы с реализацией авторизации на access + refresh токенах:
https://share.effector.dev/6oc5fHYG
requestHandlerFx
суть проблемы в этом методе.
из-за того что запросы в состоянии гонки, один из них делает refresh раньше чем другой.
второй в догонку шлет refreshToken, но сервер уже обновил его и валиться ошибка
источник

MK

Maxim Koylo in ☄️ effector
🚀🔬 🚀🔬🚀🔬
ага, либо задуматься, действительно ли у нас эти эффекты можно объединить под доменом (например фронтенд-разработчиков нельзя объединить под доменом «использовали в жизни date-fns»)

поэтому вместо домена я и предложил явный форвард: именно эти эффекты будут пересылать ошибки в sentry
спасибо👍
источник

TG

Timofey Goncharov in ☄️ effector
по идеи моя проблема с refresh токеном может быть решена, если хранить refresh в корне модуля, а не в сторе.
но это же нарушение и хочется найти правильное решение по flow эффектора.
источник

V

Vetro in ☄️ effector
Maxim Koylo
Делаете ли вы обработку ошибок эффектов домена через хук домена? Я как вижу это отличное решение для обработки стандартной ошибки при которой покажется какой-то алерт с ошибкой и отправки ошибки в сентри.
А вот если на каком то эффекте нам не нужно обрабатывать дефолтную ошибку, а выполнить что то другое?
https://share.effector.dev/q2O8lh4m
у нас пока так, чуть позже будет проверка что там должен быть не просто either, а именно either с ошибкой валидации декодера
источник

V

Vetro in ☄️ effector
но потом лучше вынести в отдельные домены работу с апи
источник

V

Vetro in ☄️ effector
а не в руте это делать
источник

MK

Maxim Koylo in ☄️ effector
Vetro
у нас пока так, чуть позже будет проверка что там должен быть не просто either, а именно either с ошибкой валидации декодера
прекл спасибо
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Timofey Goncharov
requestHandlerFx
суть проблемы в этом методе.
из-за того что запросы в состоянии гонки, один из них делает refresh раньше чем другой.
второй в догонку шлет refreshToken, но сервер уже обновил его и валиться ошибка
так, я кажется решил https://share.effector.dev/kv7flQZ5

ключевая часть решения — defer, это то, что позволяет одним эффектам дождаться окончания произвольных других
источник

🚀🚀

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

TG

Timofey Goncharov in ☄️ effector
🚀🔬 🚀🔬🚀🔬
так, я кажется решил https://share.effector.dev/kv7flQZ5

ключевая часть решения — defer, это то, что позволяет одним эффектам дождаться окончания произвольных других
хм, очень интересно. но пока на 100% не понятно
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
идея в том, что отдельный эффект getTokensFx с помощью апдейта $authData говорит остальной системе «всем приостановить запросы до дальнейших указаний», ну и вот defer и является таким указанием
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Timofey Goncharov
хм, очень интересно. но пока на 100% не понятно
альтернативная но тождественная идея — массив подписок на окончание — https://gist.github.com/mkjiau/650013a99c341c9f23ca00ccb213db1c
refreshSubscribers — это буквально то же самое что и дефер, просто в случае с дефером мы реализуем очередь не руками, а с помощью движка, с помощью реализации промисов
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
то есть, что вообще такое подписка на окончание? это then

вот есть промис произвольного содержания:

const req = new Promise(() => {})


как сказать «оповестите меня по его окончанию»? then.

req.then(() => "о, вы уже закончили, отлично")
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
а теперь, как извне колбэка промиса req сообщить всем подписчикам, что им можно начинать работать? промис оповестит всех, когда будет вызван его аргумент resolve. значит, в конечном счёте нужно вызвать resolve извне:

let resolve
const req = new Promise(rs => resolve = rs)

resolve("я всё")


и это и есть паттерн defer
источник

TG

Timofey Goncharov in ☄️ effector
где-то уже встречалось подобное, когда вытаскивают колбеки из промиса наружу.
но все равно мозг ломает
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
ну да
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
я бы хотел это в итоге обобщить для эффектора, но пока не до конца понятно, с чем мы имеем дело (это интерсепторы? это обобщённая очередь? это что-то типа respondWith в апи сервис-воркеров?)

а понимание приходит именно во время обсуждения практических кейсов)
источник

TG

Timofey Goncharov in ☄️ effector
у меня раньше был код под aixos с интерсепторами который решал задачу по обновлению access токена.
но когда я прикрутил его в итоге к эффектору, столкнулся с неприятностями и решил в что все же, лучше максимум логики вынести на уровень эффектов и стор.
источник