培根巴士的怪异行为与流事件的结束
Bacon Bus weird behaviour with end of stream event
这很好用:
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);
事实上,那里有一个回调,这让我非常恼火。所以上面的实际解决方案非常好
这是因为总线没有结束:您仍然可以向总线推送更多事件。总线结束的唯一情况是在总线上调用end()方法。
相关文章:
- 处理第三方库发送的ajax请求的开始和结束事件
- 在触摸结束事件期间,Find元素手指处于打开状态
- 检测 iPhone 结束事件
- 无法从响应的结束事件中对 Http.Request 进行递归调用
- iOS7 野生动物园移动版|网页视频流 |未触发已结束事件
- 如何创建自定义事件来处理所有转换结束事件
- 有没有办法忽略某些基于 css 属性的转换结束事件
- 在 Firefox 中测试转换结束事件支持
- CSS 转换和转换结束事件的争用条件 - 找不到解决方案
- 转换结束事件未触发
- 模拟触摸开始和触摸结束事件
- 检测异步系统中的结束事件
- 将“结束”事件绑定到没有 ID 或类的声音播放
- 转换结束事件触发两次
- Node.js Http服务器,readstream结束事件两次触发console.log
- 我怎样才能浏览's”;束“;函数来发出结束事件
- 无论是否有请求的结束事件;这就是区别
- openlayer3捕获移动结束/缩放结束事件
- iPad1在视频播放结束之前启动视频结束事件
- 结束事件视频不工作