Javascript 什么是Bacon.js中的惰性评估?

Javascript 什么是Bacon.js中的惰性评估?,javascript,rxjs,frp,bacon.js,Javascript,Rxjs,Frp,Bacon.js,我无法理解Bacon.js中的懒惰评估是什么 我使用map和flatMap编写了Bacon提供的示例,得到了相同的结果 这是HTML <input id="itemname" type="text" /> <input id="additem" type="button" value="Add Item" /> <input id="purchase" type="button" value="Purchase" /> 下面是使用flatMap的JS代码 v

我无法理解Bacon.js中的懒惰评估是什么

我使用map和flatMap编写了Bacon提供的示例,得到了相同的结果

这是HTML

<input id="itemname" type="text" />
<input id="additem" type="button" value="Add Item" />
<input id="purchase" type="button" value="Purchase" />
下面是使用flatMap的JS代码

var items = $("#additem").asEventStream("click").flatMap(function(e){
    console.log("Executing");
    return document.getElementById("itemname").value;
}).toProperty();

var submittedItems = items.sampledBy($("#purchase").asEventStream("click"));
对于这两个版本的JS,即使单击按钮,也不会记录任何内容。根据文档,第二个应该在控制台上输出“正在执行”消息

如果我使用onValue连接订户,这两个代码都可以工作


请帮助我了解出了什么问题?

当您创建一个基于另一个流的流时,例如通过调用不订阅原始
流的
stream.sampledBy(…)
。不管有多少创建流从流函数你们链在一起。因此,
$(“#添加项”).asEventStream(“单击”)
不会导致订阅,
.map(…)
.toProperty()

只有在专门记录为订阅流的调用时,才进行实际订阅。它们列在此处的“EventStreams和属性中的常用方法”下:-即
subscribe()
onValue()
onValues()
onError()
onEnd()
。如果您不关心事件,可以使用
submittedItems.oned(function(){})它从未被实际调用,因为您的流从未结束

var items = $("#additem").asEventStream("click").flatMap(function(e){
    console.log("Executing");
    return document.getElementById("itemname").value;
}).toProperty();

var submittedItems = items.sampledBy($("#purchase").asEventStream("click"));