有没有更简单的实现方法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)
请注意,除非存在虚拟消费者,combineWith
否则单独不起作用:onValue()
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()
?