这很好用:
var Bacon = require('baconjs');
var a = Bacon.fromArray([1,2,3])
a.onValue(function(val){
console.log(val)
})
a.onEnd(function(){
console.log("END")
})
...意味着onValue和onEnd被正确调用,这就是结果:
1
2
3
END
这不起作用(至少我)预期:
var Bacon = require('baconjs');
var bus = new Bacon.Bus();
var a = bus.flatMap(function(){
return Bacon.fromArray([1,2,3])
})
a.onValue(function(val){
console.log(val)
})
a.onEnd(function(){
console.log("END")
})
bus.push(1)
...意味着在这种情况下'onEnd'没有被调用,结果就是:
1
2
3
是否有原因,解决方案是什么?
更新
这正是我最终需要的:
var Bacon = require('baconjs');
var a = Bacon.fromArray([1,2,3])
.fold(0,function(a,b){return a+b;})
.filter(function(val){ return val > 0 });
var bus = new Bacon.Bus();
var ff = bus.flatMap(function(){
return Bacon.combineTemplate({status:true, result:a});
});
ff.onValue(function(val){
console.log(val)
setImmediate(function(){
bus.push(3)
})
})
ff.onEnd(function(){
console.log("END")
})
bus.push(3)
基本上我需要知道总线何时结束,以便我可以向数据库询问另一块记录,依此类推。 问题是没有总线上的“结束”信号就无法工作。虽然这样的事情有效:
var Bacon = require('baconjs');
var bus = new Bacon.Bus();
bus.onValue(function(){
var a = Bacon.fromArray([1,2,3])
a.onValue(function(val){
console.log(val)
})
a.onEnd(function(){
console.log("END")
})
})
bus.push(1);
有一个回调的事实让我感到厌烦。所以上面的实际解决方案非常好
答案 0 :(得分:1)
那是因为总线没有结束:你仍然可以将更多事件推送到总线。总线结束时唯一的情况是在总线上调用end()方法。