培根的评价模型是什么.js

What is the Evaluation Model of Bacon.js?

本文关键字:是什么 js 模型 评价      更新时间:2023-09-26

大多数关于响应式编程的资源,例如"响应式编程调查"(Bainomugisha等人,2012),引入了几个特征,通过这些特征可以对不同的响应式解决方案进行分类。其中之一是采用哪种评估模型,即响应式语言(或库)是基于推送的还是基于拉的(或两者兼而有之)。

示例:让我们看一下这段伪代码: var c = a + b; 在响应式环境中,c 应始终包含 ab 的总和。因此,如果ab发生变化,则必须重新计算c的值。在基于推送的解决方案中,ab 在其值更改时通知c,以便可以立即重新计算c的值。在基于拉取的解决方案中,c查找a的当前值,并在需要值c本身时立即查找b。因此,所有的重新计算都被延迟到请求c的值。

很长一段时间以来,我一直试图弄清楚 JavaScript 库 Bacon.js 正在使用什么评估模型。让我们假设以下内容:

var a = Bacon.constant(21); // Creates a Property
var b = Bacon.constant(21);
var c = a.combine(b, function (x, y) {
    return x + y;
});

根据培根.js文档的这一部分,诸如combine之类的组合器使用惰性求值,也就是说,它们"避免求值实际上不需要的值"。

  • 问题1:什么时候"实际"需要价值观?
  • 问题2:至少在上面的例子中,培根采用基于拉动的方法.js是否可以安全?还是我在这里混淆了东西?

然而,在本节的末尾,培根.js文档提到,如果一个人想要"在原始事件发生时进行力评估,[一个人]可以使用flatMap"。真的,现在我很困惑:

  • 问题3:分别,假设培根.js每当我使用flatMap时都采用基于推送的评估模型,是否可以安全?还是我在这里把事情搞混了——又一次?
  • 问题4:我无法使用flatMap而不是combine从上面重现示例。这是否意味着,根据我想要做的事情,培根有时会采用基于拉动的变革传播.js有时它会提出基于推送的传播?

对于能够提供澄清的人,我将非常高兴。 :P

  1. 当订阅服务器调用事件的 value() 方法时,值是"必需的"。例如,这发生在所有.on Value订阅者中。像 mapcombine 这样的组合器在需要它们各自的值之前不会评估输入值。另一方面,flatMap(f)需要评估,因为它使用该值通过提供的函数 f 生成新流。scan目前也很热切。

  2. 如上所述,它是推拉的混合体,因为在必要时进行评估。事实上,培根.js不是基于任何研究论文,也不符合任何理论模型。

  3. 不,不要假设任何模型。相反,使用引用透明函数,并让系统决定何时需要评估它们。

  4. 当然,您无法使用flatMap重现与combine相同的功能。