什么是Bacon.js的懒惰评价?

时间:2016-01-31 17:16:31

标签: 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" />

这是使用map

的代码的JS
var 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附加订阅者,则代码都有效。

请帮我理解什么是错的?

1 个答案:

答案 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(){});从未被实际调用过。