培根.js当另一个事件流触发时重新启动缓冲

Bacon.js restart buffering when another EventStream fires

本文关键字:重新启动 缓冲 js 另一个 事件 培根      更新时间:2023-09-26

我正在尝试使用培根制作一个简单的画布绘图应用程序.js。它应该允许通过使用这样的鼠标单击选择起点和终点来绘制一条线。

points = paper.asEventStream('click')
  .map((e) -> x: e.pageX, y: e.pageY)
  .bufferWithCount(2)

目前为止,一切都好。现在它应该允许通过单击 Esc 来取消起点选择。

cancel = doc.asEventStream('keypress')
  .map((e) -> e.keyCode)
  .filter((key) -> key is 27)
  .map(true)

重新开始缓冲的培根方式是什么?
上级:到目前为止,我得到的实现看起来很糟糕。

points
  .merge(cancel)
  .buffer(undefined, (buffer) ->
    values = buffer.values
    if values.some((val) -> val is true) then values.length = 0
    else if values.length is 2 then buffer.flush())  

您可以从取消开始缓冲:

var filteredPairs = cancel.startWith(true).flatMapLatest(function() {
  return points.bufferWithCount(2)
})

见 jsFiddle