Javascript 如何将Bacon.js流延迟到另一个流上的值?

Javascript 如何将Bacon.js流延迟到另一个流上的值?,javascript,reactive-programming,bacon.js,Javascript,Reactive Programming,Bacon.js,给定两个Bacon.Buses,我需要组合它们各自的值。但是,第二条总线的“生产效率”要高得多(约为1:200),第一条总线的速度也较慢,其第一个值严重延迟,例如,通过XHR或类似方式获取。因此,第一条总线中的第一个值是在第一个“批处理”已经通过第二条总线之后发出的。因此,Bacon.onValues(bus1,bus2,f(b1,b2))不起作用,bus1.sampledBy(b2,f(b1,b2))也不起作用,原因相同 我假设我需要一种方法来缓冲我的第二条总线,并在第一条总线发出一个值时释放

给定两个
Bacon.Bus
es,我需要组合它们各自的值。但是,第二条总线的“生产效率”要高得多(约为1:200),第一条总线的速度也较慢,其第一个值严重延迟,例如,通过XHR或类似方式获取。因此,第一条总线中的第一个值是在第一个“批处理”已经通过第二条总线之后发出的。因此,
Bacon.onValues(bus1,bus2,f(b1,b2))
不起作用,bus1.sampledBy(b2,f(b1,b2))也不起作用,原因相同

我假设我需要一种方法来缓冲我的第二条总线,并在第一条总线发出一个值时释放它。也许我需要像中提到的暂停流这样的东西,但也许我在这里遗漏了一些非常明显的东西

那么,如何延迟第二条总线直到第一条总线上出现一个值呢?

CombineAArray()似乎可以很好地完成这项工作

查看此演示:


您想要什么样的语义?也许是拉链?这将结合第一个A和第一个B,第二个A和第二个B等等。相反地,
(a[0],b[0]),(a[0],b[1]),(a[0],b[2]),…
直到
a[1]
出现,然后
(a[1],b[n]),(a[1],b[n+1]),…
等等。它实际上是一个简单的
组合数组
,但我似乎无法让它真正等待
a[0]
出现,所以我得到了类似
(a[0],b[50],b[51],b],…
@Phae7rae:我不知道这样做是否有点奇怪,但你似乎已经给出了答案,然后把它删除了。这是个错误吗?非常感谢您的意见!不,它没有,但是谢谢你的例子——我已经修改了它以显示问题。请看--由于第二个流比第一个流晚5秒启动,
combineAsArray
将错过第一个流中的所有事件,因此输出计数器从“5:0”开始。在组合之前,我将流转换为属性,然后它看起来像预期的那样工作:我再次打破了它:)--我已经删除了初始属性值,因为事实就是如此(例如AJAX请求)。我需要重新阅读你的问题,因为我想我并没有真正得到你想要达到的目标。我想在一个流上缓冲值,直到另一个流变为活动状态,
combineAsArray
之后。