在附加任何消费者之前访问属性值

时间:2014-05-20 20:04:18

标签: javascript frp bacon.js

培根对我来说仍然是个大惊喜...

bus = new Bacon.Bus()
busProperty = bus.toProperty()

bus.push 'someValue'

busProperty.onValue (val) ->
    console.log val

这样,根本没有任何内容记录到控制台。我可能从错误的角度看,但我希望,财产提供的是最新的价值。显然,这并不容易......

busProperty.log()

bus.push 'someValue'

busProperty.onValue (val) ->
    console.log val

突然间,我得到了'someValue'两次登录。这意味着在有消费者之前,财产不关心流价值?有可能以某种方式克服这个问题吗?似乎相当愚蠢,我需要附加空的消费者只是为了将价值存储到Property中。

这是我的应用设计的一部分,该流在连接任何消费者之前都会获得价值。但是,我确实关心过去的价值。基本上我正在寻找Promise / A的同步版本:)

1 个答案:

答案 0 :(得分:0)

这是一个已知问题,但"设计"。 FAQ条目Why isn't my Property updated?解释说:

  

这里发生的事情是您的财产何时无法更新   没有听众。在使用之前添加实际侦听器之前   onValue,该物业不活跃;它没有听   底层巴士。在有人感兴趣之前,它会忽略输入。所以这一切   归结为" laziness"所有培根流和属性。这个   也是一个关键功能:流自动"插入"他们的   添加订户时的来源,以及"拔掉"什么时候没有   更多订阅者。

     

您可以考虑使用   而是Bacon.Model。那' 11   给你一个"可设置的属性"还有许多其他功能。