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


Denis
06.07.2017
09:09:23
distinctUntilChanged

Google

Kirill
06.07.2017
09:14:20
Сделал поиск по коду в 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
А зачем они сделали вообще диспатч, экшен тайп, для которых все эти свитчы и константы нужны? Если просто всё делать через методы класса, это не удобнее получается?

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 делает же тоже только еще и реактивно

andretshurotshka?❄️кде
06.07.2017
09:57:41

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

Kirill
06.07.2017
15:44:15
Почему не работает toPromise?
http://jsbin.com/vubaredupu/2/edit?js,console

? 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
где?

Дмитрий
06.07.2017
22:43:02
Я не очень шарю в рх, но складывается впечатление что здесь проблема ради проблемы

Denis
06.07.2017
22:45:04

Дмитрий
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

Denis
06.07.2017
23:22:54

Дмитрий
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) в фьючерсах