2015-03-27 1 views
4

Как новичок в bacon.js, я не могу понять разницу между потоком событий и свойством.Bacon.js: практическая разница между потоком и свойством

  • Свойство построено из потоков (за исключением свойств, построенных с .constant?)
  • Они имеют большинство методов в общем
  • подписавшись на них работает таким же образом

Может кто-то объяснить разницу и когда использовать какой?

В приведенном ниже примере stream и property имеют такое же поведение. Боюсь, я не вижу этого.

var stream = Bacon.sequentially(250, [1, 2, 3, 4, 5, 6, 7, 8]); 
var property = stream.toProperty(); 

stream.onValue(function (val) { 
    console.log("Stream", val); 
}); 

property.onValue(function (val) { 
    console.log("Property", val); 
}); 

ответ

5

В Bacon.js свойства являются Behaviors в FRP литературе и EventStreams являются только События. Они выглядят очень похожими, но семантически они очень разные.

Ознакомьтесь с концепциями FRP, например. есть this answer.

+0

От http://blog.flowdock.com/2013/01/22/functional-reactive-programming-with-bacon-js/: * «Свойство используется как абстракция для изменяющегося во времени значения. похожие на EventStreams, но они также имеют представление о текущем значении. Большая часть функциональных возможностей используется совместно с EventStreams. »* Что означает« текущее значение »? Кажется, что значение свойства можно прочитать напрямую. –

+0

Вы не можете прочитать текущее значение свойства (поведение), это противоречит семантике. Поведение - изменяющееся во времени значение, но вы не можете обрабатывать время явно. Если бы мы дали вам возможность читать * текущее значение *, то сразу после того, как вы захотите прочитать * предыдущее * значение и т. Д. В FRP вам действительно не нужно * текущее * значение; например если мы показываем текущее время с 'currentTime.assign (label," text ")' - там мы обрабатываем * все * значения универсально, и библиотека позаботится о том, что при изменении 'currentTime' обновляется' label.text'. – phadej

+1

Именно так я и понял вещи, но почему бы не сказать, что eventStream имеет текущее значение тоже? Или это свойство имеет * только * текущее значение, которое отличает его от потока? –

 Смежные вопросы

  • Нет связанных вопросов^_^