Size: a a a

2020 September 30

YL

Yan👀 Lobaty in ☄️ effector
соотственно какой-то стор pendingResults должен быть как я понимаю
источник

YL

Yan👀 Lobaty in ☄️ effector
то есть мы в нужный нам ничего не пишем пока первый эффект не завершился
источник

YL

Yan👀 Lobaty in ☄️ effector
как только он завершился мы смотрим завершился ли второй и если да пишем
если нет ждем дальше
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Yan👀 Lobaty
то есть мы в нужный нам ничего не пишем пока первый эффект не завершился
а вот в этой точке мне уже становится интересен практический смысл, какой процесс в приложении требует такого?
источник

G

GG in ☄️ effector
🚀🔬 🚀🔬🚀🔬
интересный вопрос, а чем вызвана такая необходимость?
корзина хранится на беке, есть три мметода, add, remove, update, все возвразщают одну структур, собственно саму корзину, апдейт происходит по таймеру, add и remove делает пользователь. Проблема в том, что допустим сперва отправляется update, и тут же может add тоже следом улетает,   а ответ приходит первым от add, там есть корзина уже с одим айтемом, а потом следом с опозданием приходит update, а там на тот момент еще нечего не было, и корзина пустая
источник

🦜

🦜 in ☄️ effector
GG
нужно что-то типо Promose.all([ef1, ef2, ef3])
только я не вызываю их вместе намеренно, еффекты могут просто иногда случайно вызыватся одновременно, но результат может приходить не в порядке вызова
fx1
fx2

fxs = createEffect(() => Promise.all([fx1(), fx2()]))

fxs()

fx1.done.watch(console.log)
fx2.done.watch(console.log)
источник

🦜

🦜 in ☄️ effector
я так делал
источник

🦜

🦜 in ☄️ effector
если я тебя понял
источник

G

GG in ☄️ effector
неа, не  то
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
GG
корзина хранится на беке, есть три мметода, add, remove, update, все возвразщают одну структур, собственно саму корзину, апдейт происходит по таймеру, add и remove делает пользователь. Проблема в том, что допустим сперва отправляется update, и тут же может add тоже следом улетает,   а ответ приходит первым от add, там есть корзина уже с одим айтемом, а потом следом с опозданием приходит update, а там на тот момент еще нечего не было, и корзина пустая
тогда вот дельная идея была https://t.me/effector_ru/167572
источник

🦜

🦜 in ☄️ effector
а, очередь из эффектов
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
🦜
а, очередь из эффектов
из результатов
источник

🚀🚀

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

🚀🚀

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

🚀🚀

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

G

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

G

GG in ☄️ effector
Вот как его найти
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
const sequenceReady = guard(pendingResults, {
 filter: list => list.length > 0 && list[0].status !== 'pending'
})
источник

AO

Aleksandr Osipov in ☄️ effector
а нельзя цепочкой forward-ов просто запускать эффекты?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Aleksandr Osipov
а нельзя цепочкой forward-ов просто запускать эффекты?
там конкурентная логика
источник