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

时间:2017-08-01 16:08:45

标签: javascript bacon.js

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

Templates

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

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

这是jsfiddle的例子:

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

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

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

1 个答案:

答案 0 :(得分:1)

如果我理解你的意图,你正在寻找一个“任务队列”机制。这是我的建议。

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/