Как новичок в 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);
});
От http://blog.flowdock.com/2013/01/22/functional-reactive-programming-with-bacon-js/: * «Свойство используется как абстракция для изменяющегося во времени значения. похожие на EventStreams, но они также имеют представление о текущем значении. Большая часть функциональных возможностей используется совместно с EventStreams. »* Что означает« текущее значение »? Кажется, что значение свойства можно прочитать напрямую. –
Вы не можете прочитать текущее значение свойства (поведение), это противоречит семантике. Поведение - изменяющееся во времени значение, но вы не можете обрабатывать время явно. Если бы мы дали вам возможность читать * текущее значение *, то сразу после того, как вы захотите прочитать * предыдущее * значение и т. Д. В FRP вам действительно не нужно * текущее * значение; например если мы показываем текущее время с 'currentTime.assign (label," text ")' - там мы обрабатываем * все * значения универсально, и библиотека позаботится о том, что при изменении 'currentTime' обновляется' label.text'. – phadej
Именно так я и понял вещи, но почему бы не сказать, что eventStream имеет текущее значение тоже? Или это свойство имеет * только * текущее значение, которое отличает его от потока? –