gpt4 book ai didi

javascript - Bacon.js 中的惰性求值是什么?

转载 作者:行者123 更新时间:2023-11-30 16:18:28 24 4
gpt4 key购买 nike

我无法理解什么是 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,即使我点击按钮也没有任何记录。根据文档,第二个应该在控制台上输出“正在执行”消息。

如果我使用 onValue 附加一个订阅者,这两个代码都有效。

请帮我理解哪里出了问题?

最佳答案

当您创建基于另一个流的流时,例如通过调用 stream.sampledBy(...)不会订阅原始 。无论您将多少个 create-stream-from-stream 函数链接在一起。所以 $("#additem").asEventStream("click") 不会导致订阅,.map(...) 也不会。 toProperty();.

只有当调用被特别记录为订阅流时,才会进行实际订阅。它们在此处的“EventStreams 和属性中的常用方法”下列出:https://baconjs.github.io/api.html - 即 subscribe()onValue()onValues()onError()onEnd ()。如果您不关心事件,您可以只使用 submittedItems.onEnd(function(){});,因为您的流永远不会结束,所以它实际上不会被调用。

关于javascript - Bacon.js 中的惰性求值是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35116755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com