【发布时间】:2014-06-02 06:37:15
【问题描述】:
这很好用:
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);
那里有一个回调,这让我很恼火。所以上面的实际解决方案是相当不错的
【问题讨论】:
标签: javascript reactive-programming frp bacon.js