【问题标题】:How do I delay a Bacon.js stream until a value on another stream?如何将 Bacon.js 流延迟到另一个流上的值?
【发布时间】:2014-04-01 15:03:52
【问题描述】:

给定两个Bacon.Buses,我需要组合它们各自的值。然而,第二辆公共汽车的“生产力”要高得多(大约 1:200),第一辆公共汽车也更慢,它的第一个值被严重延迟,例如通过 XHR 或类似的东西获取。因此,在第一个“批次”已经通过第二个总线之后,会发出第一个总线中的第一个值。因此,Bacon.onValues(bus1, bus2, f(b1, b2)) 不起作用,bus1.sampledBy(b2, f(b1, b2)) 也不起作用。

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

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

【问题讨论】:

  • 你在寻找什么样的语义?邮编可能吗?这将把第一个 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]), ... 等等。这实际上是一个简单的combineAsArray,但似乎我无法让它真正等待a[0] 出现,所以我得到类似@987654330 的东西@
  • @Phae7rae:我不知道 SO 是否表现得很奇怪,但是您似乎已经给出了答案然后将其删除。这是一个错误吗?非常感谢您的意见!

标签: javascript reactive-programming bacon.js


【解决方案1】:

combineAsArray() 似乎做得很好

查看此演示:

http://codepen.io/turbohz/pen/jFxqw

【讨论】:

  • 不,它没有,但感谢你的例子——我已经修改了它以显示问题。看codepen.io/anon/pen/urfJs -- 因为第二个流比第一个晚五秒开始,combineAsArray 错过了第一个的所有事件,因此输出计数器从“5:0”开始。
  • 我在合并之前将流转换为属性,然后它似乎按预期工作:codepen.io/anon/pen/eBita
  • 我又把它弄坏了 :) codepen.io/anon/pen/IwApr -- 我已经删除了初始属性值,因为情况正是如此(例如 AJAX 请求)。
  • 我需要重新阅读您的问题,因为我认为我并没有真正得到您想要实现的目标
  • 我想在一个流上缓冲值,直到另一个流激活,之后combineAsArray
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多