These are chat archives for pozadi/kefir

4th
Mar 2015
Sergey Lapin
@lapanoid
Mar 04 2015 12:08
@pozadi Привет, извини за русский. Сейчас авральная ситуация, мы заиспользовали kefir и сейчас обнаружили очень неприятный баг. У нас есть combine (условно aviationProperty) который работает только если мы подписываемся на обычные (не combine проперти), если мы подписываемся на combine (условно configProperty), то aviationProperty перестаёт тригерится, при этом configProperty точно имеет значение
Roman Pominov
@rpominov
Mar 04 2015 13:31
@lapanoid Не очень понял ситуацию, может jsFiddle? Или хотя бы просто кусок кода (но минимального, не кода приложения на 1000 строк)
@lapanoid еще см. http://pozadi.github.io/kefir/#active-state (часть с :point_up:)
Sergey Lapin
@lapanoid
Mar 04 2015 15:18
Кажется нашли ошибку, у нас модель с конфигом наружу даёт observable, на которые затем уже подписываются и комбайнят другие модели. В результате combain работал только при первом запуске, при втором запуске от этих observable не приходил в _handleAny event. Я думал что если комбайнишь обзервабл, то он будет вычислять и передавать значение подписщику на основе пропертей от которых он зависит, видимо думал ошибочно. Видимо если апи выставляешь то можно отдавать на использование только проперти, тк они хранят своё значение.
Хотя было бы круто если при подписке на обсервабл он обходил свои сорцы и передавал вычесленное
Rodolfo Hansen
@kryptt
Mar 04 2015 15:23
:( I need to learn russian...
Sergey Lapin
@lapanoid
Mar 04 2015 15:23
Sorry)
I can write in english, I just have urgent matter)
Rodolfo Hansen
@kryptt
Mar 04 2015 15:24
no worries!
:)
it just makes men want to learn a new language
Sergey Lapin
@lapanoid
Mar 04 2015 15:32
@pozadi то есть если проперти ты хранишь значение, а если обзервабле то оно вычисляется и передаётся, у меня было вот такое сильное предположение. Можешь подтвердить его или опровергнуть? По поводу http://pozadi.github.io/kefir/#active-state, в случае с observable мы его активировали после инициализации пожизненным
armyArrayObs.onValue(function(v){
console.log("");
})
Это не помогло
Мы мощно продебажились по кефиру, было очень интересно))
Roman Pominov
@rpominov
Mar 04 2015 16:26

@lapanoid

Хотя было бы круто если при подписке на обсервабл он обходил свои сорцы и передавал вычесленное

Если в цепочке все проперти, то так и происходит по идее.

Sergey Lapin
@lapanoid
Mar 04 2015 16:26
Так если в цепочке проперти то они просто хранят данные и отдают их, а не вычисляют
там this._current отдаётся или нет?
Я попробую сделать пример щас
Roman Pominov
@rpominov
Mar 04 2015 16:29
Я имел в виду что если p1->p2->p3, при этом p2 и p3 не активны, и ты подписываешься на p3, он вытянет актуальное значение из p1 протащив его через p2 %)
А когда проперти активен, то актуальное значение просто в this._current — да.
Sorry for the russian, folks.
@lapanoid lets write in english if there no urgent matter any more :)
Sergey Lapin
@lapanoid
Mar 04 2015 16:35
Can be p2 and p3 observables in the same scenario or it should be only properties(active or not)?
Roman Pominov
@rpominov
Mar 04 2015 16:39
if p2 is a stream there is 2 cases: 1) if both p2 and p3 are not active they will pull current value from p1 in moment of activation 2) if p2 was already active, and you subscribing to p3 it won't pull current value because p2 being a strems doesn't store it.
But it becomes a bit complicated to explain, the short answer is: if you need current value you should use properties.
Roman Pominov
@rpominov
Mar 04 2015 16:53
Anyway you can't build a property->stream->stream chain, except using .changes but then you removing current value by yourself.
Sergey Lapin
@lapanoid
Mar 04 2015 16:55
so stream should be only intermediate?
Roman Pominov
@rpominov
Mar 04 2015 16:56
Looks like there some misconception about stream/property semantic, perhaps this https://pozadi.github.io/kefir/#about-observables might help to understand.

so stream should be only intermediate?

No, you use streams when you need stream of events, there is no current value just events that happens in time.

If you need an observable value you use property.
But streams of events also useful.
Sergey Lapin
@lapanoid
Mar 04 2015 16:59
Do I have any control should be my data stored or evaluated?
seems like properties solve that undercover
Roman Pominov
@rpominov
Mar 04 2015 17:01
If you need data to be evaluated through all chain at each request, it sounds like pull based FRP, but Kefir is push based.
Sergey Lapin
@lapanoid
Mar 04 2015 17:07
Can it be both explicitly? I mean you always have two ways to deal with data, evaluate or store. Always store is a bad idea, always evaluate even worse. You can have some default behavior, but it can be cool option to make it possible to make some (okey) props "evaluable". Of course if it is not contadics your desigh philosophy of the library.
Roman Pominov
@rpominov
Mar 04 2015 17:11
You talking about property's current values right? Just to clarify :) Now it works automatically. Properties might evaluate data on "first request", but then will cache the result in this._current.
I think it theoretically possible to make this configurable, but not easy for sure.
Sergey Lapin
@lapanoid
Mar 04 2015 17:12
It means you mostly keep it in memory
Roman Pominov
@rpominov
Mar 04 2015 17:13
I'm personally did have any problems with the fact that current value caches.
But you are right it spends some memory.
Sergey Lapin
@lapanoid
Mar 04 2015 17:16
It became an issue if you operate with some big data occasionally
Roman Pominov
@rpominov
Mar 04 2015 17:19
Yes, might be an issue and Kefir doesn't help to solve this unfortunately.