gpt4 book ai didi

javascript - Bacon.js 中的 3 个属性的 .when

转载 作者:行者123 更新时间:2023-11-28 20:19:12 28 4
gpt4 key购买 nike

有没有更简单的方法来实现combine3

var Bacon = require('baconjs')

function emit(delay)
{
var s = new Bacon.Bus()
setTimeout(function ()
{
console.log("emit", delay)
s.push(delay)
}, delay)
return s.toProperty()
}

var foo = emit(500)
var bar = emit(1000)
var baz = emit(1500)

function consume(foo, bar, baz)
{
console.log("consumed", foo, bar, baz)
}

function combine3(consume, foo, bar, quux)
{
Bacon.combineWith(function (foo, bar, quux)
{
return { foo : foo, bar : bar, quux : quux }
}, foo, bar, quux)
.onValue(function (x)
{
consume(x.foo, x.bar, x.quux)
})
}

combine3(consume, foo, bar, baz)

请注意,除非存在虚拟 onValue() 消费者,否则 combineWith 单独不起作用:

Bacon.combineWith(consume, foo, bar, baz).onValue(function () {})

解决方法看起来仍然像黑客。以下 3 个版本不调用 consume():

Bacon.when([foo, bar, baz], consume)
Bacon.update(911, [foo, bar, baz], consume)
Bacon.zipWith(foo, bar, baz, consume)

当前的任务是根据 3 个参数过滤 HTML 表格。因此 consume 根据当前选择的过滤条件绘制表格,并且不会生成新的 Observables

还有,有没有更简单的方法来编写emit()

最佳答案

然后使用combineWith方法从现有的Observables(Properties和EventStreams)创建一个新的Property。所有 Observable 都是惰性的,即除非它们至少有一个订阅者,否则不会注册到底层源。

您不应该将 Observables 的组合(包括组合、压缩、何时、更新等)与分配副作用(即注册订阅者)混淆。如果您希望对 Observable 中的值调用“consume”函数,则需要将其注册为订阅者。

仍然存在 Bacon 事件仅携带一个值的问题,因此您不能将 N 元函数与 onValue 一起使用。不过,您可以使 Observable 包含数组作为值,并使用“onValues”方法将值数组拆分为 N 元函数的参数。

因此,实现此目的的一种方法是

// Property that emits values as arrays of [foo, bar, baz]
var combined = Bacon.combineAsArray(foo, bar, baz)
// Assign side effect. Split value arrays to 3-ary function.
combined.onValues(consume)

因为我发现您想要组合 N 个 Observables 并对值应用 N 元函数是很常见的情况,所以有一个速记方法“Bacon.onValues”用于此目的。所以,最简单的答案就是

Bacon.onValues(foo, bar, baz, consume)

关于javascript - Bacon.js 中的 3 个属性的 .when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18662448/

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