如何在从另一条总线接收到内容后仅启用一次进程
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 示例:
我的意思是只有一次,但每次点击按钮后。
这是我想要实现但没有 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/
我需要了解如何使用 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 示例:
我的意思是只有一次,但每次点击按钮后。
这是我想要实现但没有 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/