@frp_ru

Страница 92 из 420
Kirill
06.07.2017
08:40:16
При подписке ты сразу получишь текущее значение. Это удобно, когда ты стейт проинициализировал, а потом открыл какую-то другую страницу, или отобразил что-то, чего еще не было. Это "что-то" порой нужно проинициализирвоать данными стейта, а потом в случае изменения стейта, также менять.
Но чтобы получить конечный BS (BehaviorSubject) через merge, надо чтобы все входящие Observables были BS? То есть в моём случае надо в каждом хэндлере для next обрабатывался случай инициализации и возвращался только текущей стейт, а не тот который у меня формируется при экшене. Поэтому я не взял BS.

Но вопрос как правильно достучатся до стейта из самого реактивного стора для меня всё равно пока до конца не ясен. Если его передавать из внешнего подписчика (в моём случае из реакт-компонента), то это получается слишком перегруженный интерфейс метода-экшена реактивного стора. Кто разбирался в ngrx, может знает как это сделано там? Или там координально другой подход?

А если ngrx переносить в реакт или использовать подход, который я описал выше, то необходимость в мемоизированных селекторах также остаётся? Просто если я приконекчу несколько реактивных сторов к компоненту, то он у меня будет перерендериваться при изменениях в любом одном сторе. Или селекторы не эту проблему решают, а просто кешируют вычисления?

Denis
06.07.2017
09:09:23
distinctUntilChanged

Google
Kirill
06.07.2017
09:14:20
distinctUntilChanged
Спасибо, буду курить.

Сделал поиск по коду в ngrx/store и не нашёл использование этой штуки.

Denis
06.07.2017
09:17:28
ngrx/core метод select

https://gist.github.com/btroncone/a6e4347326749f938510#managing-updates-with-distinctuntilchanged

Kirill
06.07.2017
09:24:08
А зачем они сделали вообще диспатч, экшен тайп, для которых все эти свитчы и константы нужны? Если просто всё делать через методы класса, это не удобнее получается?

ngrx/core метод select
А у ngrx есть монолитный репозиторий, где сразу можно весь код открыть?

Denis
06.07.2017
09:34:51
https://github.com/ngrx/platform

Kirill
06.07.2017
09:35:21
Ага, спасибо.

Denis
06.07.2017
09:51:26
они еще юзают реселект, хотя мне кажется почему не combineLatest? https://github.com/ngrx/example-app/blob/master/src/app/reducers/books.ts#L85 делает же тоже только еще и реактивно

Denis
06.07.2017
09:58:01
combineLatest?

andretshurotshka?❄️кде
06.07.2017
09:58:37
да

Denis
06.07.2017
09:59:17
ну пока нового значения для стрима не будет он всегда будет брать старое

Google
andretshurotshka?❄️кде
06.07.2017
11:54:19


Denis
06.07.2017
12:01:56
https://t.co/O5EnZYFDsY :D

а вообще кока https://github.com/koka-lang/koka

https://github.com/nponeccop/HNC/wiki/Competitors

за аниме тут должен быть бан)

Yumi
06.07.2017
14:52:26
За оскрбляющие хаскель картинки тоже?

andretshurotshka?❄️кде
06.07.2017
15:27:30
? animufag ?
06.07.2017
16:49:30
что-то тут не так

везде передаётся Rx.Subject<any>

создаётся промежуточный промиз и ожидается

ожидается с расчётом на то, что операция произойдёт тут же?

и то есть это синхронная операция, завёрнутая в асинхронный код?

Denis
06.07.2017
17:42:03
выкинуть нахер промисы?

? animufag ?
06.07.2017
17:45:08
хз. лень читать код. но вообще rx может заменить промизы. особенно если rx2 (есть ли планы завозить его в неджава языки?)

Denis
06.07.2017
17:45:50
может конечно

проблема в том что промисы это ранняя срань и еще это микротаска в своем мирке выполняется и это не ленивая структура

а может сломано что-то в Rx5 http://jsbin.com/kanamoz/1/edit?js,console

ясно

Google
Denis
06.07.2017
17:54:08
http://reactivex.io/rxjs/file/es6/operator/toPromise.js.html#lineNumber66

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

тогда и будет результат для промиса

Kirill
06.07.2017
21:06:28
и то есть это синхронная операция, завёрнутая в асинхронный код?
Я просто не знаю как по-другому получить текущий стейт из смердженных subject и после этого сразу же делать next с помощью этих смёрждженных subject. Если я просто подпишусь на смердженный observable (rootObservable$) для получения стейта и там же буду делать next'ы, то у меня рекурсия получится.

Denis
06.07.2017
21:11:56
?

Дмитрий
06.07.2017
22:41:48
Такое орщущение

Что где-то тут громадный костыльный велосипед

Denis
06.07.2017
22:42:26
где?

Denis
06.07.2017
22:45:04
Я просто не знаю как по-другому получить текущий стейт из смердженных subject и после этого сразу же делать next с помощью этих смёрждженных subject. Если я просто подпишусь на смердженный observable (rootObservable$) для получения стейта и там же буду делать next'ы, то у меня рекурсия получится.
сделай через BehaviorSubject у него есть метод для вытаскивания текущего значения например ты можешь достать его и модифицировать и дальше пульнуть const b = new BehaviorSubject(1) b.subscribe(x => console.log(x)) const currentValue = b.value b.next(currentValue + 10)

Дмитрий
06.07.2017
22:45:46
Потому что у меня на most стеке уже есть реактивные значения и эпики от экшна до экшна

Дмитрий
06.07.2017
22:46:17
Кстати, вероятно одна из проблем автора в отсутствии последних, не?

Denis
06.07.2017
22:46:24
redux-most?

Дмитрий
06.07.2017
22:46:28
Да

Плюс most-subject

Denis
06.07.2017
22:47:14
я уже же показывал как сделано в ngrx эти effects

Дмитрий
06.07.2017
22:50:04
Ну я про конкретно его проблему. Какие-то промисы, реселекты, о чём он вообще)

Denis
06.07.2017
22:50:28
промисы маст дай

хочу выпилить из ngrx все и сделать чтобы было проще вот так createStore({ init, dispatcher, reducer, effects })

Google
Дмитрий
06.07.2017
22:52:22
А dispatcher зачем?

Denis
06.07.2017
22:52:57
ну чтобы он отдельно был)

пригодится

пока не придумал

кстати я вспомнил как я делать стримы пытался просто обернувши в асинхронную коробку Either https://github.com/xgrommx/practical-functional-programming/blob/master/stream.js

и таким образом в сабскрайб приходит either с ошибкой или результатом и непадает

вот думаю попробовать с Validation чтобы еще ошибки накапливать

Admin
ERROR: S client not available

Дмитрий
06.07.2017
23:16:45
А где нибудь вообще есть нормальный either? С оптимизацией chain по стеку

Меня главным образом это останавливает

Юзать в бесконечном процессе структуру, которая заведомо не вывезет бесконечный .chain это не очень хорошая идея ?

Я вот знаю, что futures можно юзать, так как в fluture chain безопасный и это отдельно указывается. У остальных пока встречал только реализацию «в лоб», которая довольно быстро падает с stack overflow

Дмитрий
06.07.2017
23:26:24
Я уже не помню сейчас точно. Можно в принципе тест написать и прогнать все реализации

Denis
06.07.2017
23:29:19
я про фючи

Дмитрий
06.07.2017
23:31:46
А, ну я ж говорю, fluture

https://github.com/fluture-js/Fluture

Integration with Sanctuary правда больше пугает чем радует ?

Sanctuary такой монстр теперь, ппц

Рантайм скоро как скалажс будет

Google
Denis
06.07.2017
23:39:12
так тут похрду через санктуари https://github.com/fluture-js/Fluture/blob/master/src/dispatchers/chain.js#L8

да и санктуари медленное...

Дмитрий
06.07.2017
23:41:41
sanctuary-type-classes — это ещё не оч страшно

Denis
06.07.2017
23:43:24
а еще это нифига не правильно https://github.com/sanctuary-js/sanctuary-type-classes/blob/v6.0.0/index.js#L1655

Дмитрий
06.07.2017
23:44:17
Почему?

Denis
06.07.2017
23:45:17
потому filterM' :: (Monad m) => (a -> m Bool) -> [a] -> m [a] filterM' p = cataM psi where psi = \case Nil -> return [] Cons x xs -> do flg <- p x return $ if flg then x:xs else xs

ща под js напишу

Дмитрий
06.07.2017
23:52:30
В принципе кстати я у себя уже сделал stack-safe

Но там пока только частный случай .contramap https://github.com/zerobias/mezzanine/blob/master/test/fantasy.test.js#L56

Denis
06.07.2017
23:54:17
const filterM = (of, p) => source => source.reduceRight((acc, x) => liftA2(flg => xs => flg ? [x,...xs] : xs)(p(x))(acc), of([]))

https://github.com/sanctuary-js/sanctuary-type-classes/pull/19/files

Дмитрий
07.07.2017
00:01:17
?

Блин, чот поймал себя на мысли, что за неимением нормального either делаю костыль из стримов

function wait<Value>(val: Promise<Value>): Stream<Value> { return of(val).awaitPromises() }

andretshurotshka?❄️кде
07.07.2017
05:52:40
?

Стрим же монадический

Все норм

Или тебе лени не надо?

Дмитрий
07.07.2017
06:00:32
most монадический)) Просто нужно апнуть значение из промиса, чтобы работать с ним дальше

Это либо .awaitPromises() в стримах, либо .fold(Left, Right) в фьючерсах

Страница 92 из 420