Bacon.js BaconJS中onValue和doAction有什么不同?

Bacon.js BaconJS中onValue和doAction有什么不同?,bacon.js,Bacon.js,onValue“将给定的处理程序函数订阅到事件流。流中的每个新值都将调用该函数。[这]是为流分配副作用的最简单方法。” 另一方面,doAction“返回一个流/属性,在该流/属性中,函数f在分派给订阅者之前针对每个值执行。” 听起来这两个函数都只是对流中的每个值执行一个函数。它们之间有什么不同?不同之处在于doAction返回相同的流,允许您链接副作用,而onValue是一个类似订阅的函数(因此返回一个取消订阅函数) [我本打算真的问这个问题,然后在我开始写下它的时候意识到了答案。如果其他人发现

onValue
“将给定的处理程序函数订阅到事件流。流中的每个新值都将调用该函数。[这]是为流分配副作用的最简单方法。”

另一方面,
doAction
“返回一个流/属性,在该流/属性中,函数f在分派给订阅者之前针对每个值执行。”


听起来这两个函数都只是对流中的每个值执行一个函数。它们之间有什么不同?

不同之处在于
doAction
返回相同的流,允许您链接副作用,而
onValue
是一个类似订阅的函数(因此返回一个取消订阅函数)


[我本打算真的问这个问题,然后在我开始写下它的时候意识到了答案。如果其他人发现自己处于类似的情况,也许这会节省他们几分钟的时间。]

最大的区别是
onValue
订阅流,
doAction
不订阅流。如果没有订户,则永远不会调用
doAction
中的函数

var numbers1 = Bacon.fromArray([1,2,3])
numbers1.doAction(function(number) {
    alert("doAction Number " + number) // This never gets called
})


var numbers2 = Bacon.fromArray([1,2,3])
numbers2.onValue(function(number) {
    alert("onValue Number " + number) // This gets called
})

var numbersBoth = Bacon.fromArray([1,2,3])
numbersBoth
  .doAction(function(number) { console.log(number) }) // gets called
  .onValue(function(number) {
    // Do something with number
  })
实际上,我只使用
doAction
进行调试。如果要将副作用拆分为单独的函数,可以添加多个
onValue
处理程序(同步流除外,但它们可以通过简单的
.delay(0)
实现异步)