我无法理解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" />
这是使用map
的代码的JSvar items = $("#additem").asEventStream("click").map(function(e){
console.log("Executing");
return document.getElementById("itemname").value;
}).toProperty();
var submittedItems = items.sampledBy($("#purchase").asEventStream("click"));
这是使用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,即使单击按钮也没有任何记录。根据文档,第二个应该在控制台上输出“Executing”消息。
如果我使用onValue附加订阅者,则代码都有效。
请帮我理解什么是错的?
答案 0 :(得分:2)
当您创建基于其他流的流时,例如通过调用getopt
,不订阅原始stream.sampledBy(...)
。无论您将多少个create-stream-from-stream功能链接在一起。因此stream
不会导致订阅,$("#additem").asEventStream("click")
或.map(...)
也不会。
实际订阅仅在具体记录为订阅流的调用时进行。它们列在&#34; EventStreams和Properties&#34;中的常用方法中。在此处:https://baconjs.github.io/api.html - 即.toProperty();
,subscribe()
,onValue()
,onValues()
和onError()
。如果您不关心这些事件,您可以使用onEnd()
,因为您的视频流永远不会结束,所以submittedItems.onEnd(function(){});
从未被实际调用过。