如何在从另一条总线接收到内容后仅启用一次进程

How to enable process only once after receiving something from another Bus

我需要了解如何使用 BaconJS 实现某些目标。我需要有类似这个解决方案的东西(这只是一个例子),但我只想在单击按钮后调用一次 processBus。所以我需要打电话

console.log((new Date()).getTime());

只有当按钮被点击并且有事件进入globalBus时。 这是我的代码:

var globalBus = new Bacon.Bus();
var processBus = new Bacon.Bus(); 
function startProcess() {
    globalBus.push(new Bacon.Next());
}

processBus.skipUntil(globalBus).onValue(function() {
    console.log((new Date()).getTime());
});

setInterval(function() {
    processBus.push(new Bacon.Next());
}, 1000);

这是 jsfiddle 示例:

http://jsfiddle.net/Tjdp5/13/

我的意思是只有一次,但每次点击按钮后。

这是我想要实现但没有 BaconJS 的示例 http://jsfiddle.net/Tjdp5/14/

如果我正确理解了您的意图,那么您正在寻找一种 "task queue" 机制。这是我的建议。

var taskE = Bacon.fromEvent(button1, "click")
   // use flatMap to force strict evaluation
  .flatMap(function() { return new Date() })
  .doLog('task created:')

var processE = Bacon.fromEvent(button2, "click")

taskE
  // for each new task, take one "process next task" click
  // use flatMapConcat to queue tasks
  .flatMapConcat(function(task) { return processE.take(1).map(task) })
  .onValue(function(task) {
    console.log('task ', task, 'processed at', new Date());
  });

这里的工作示例:http://jsfiddle.net/52mb7b36/