假设我有一个按钮和一个流,它是多个流的组合,如下所示:
let button = Rx.Observable.fromEvent($('#button'), 'click')
let source = Rx.Observable.combineLatest(multiple_source, (...val) => val)
我想要以下行动:
button
source
source
事件时,阻止click
继续产生价值button
,source
再次产生最新结果我尝试了以下但未成功:
// `source` keep yielding values after button is clicked
button.flatMap( () => source).subscribe(val => do sth...)
// `source` only yield values once but not yielding values
// when some input changes
button.flatMap( () => source.take(1)).subscribe(val => do sth...)
// `source` only yield values when button is clicked.
// But like the above case, it stop yielding values
// when some input changes
source.takeUntil(button).subscribe(val => do sth...)
答案 0 :(得分:2)
我发现在这种情况下工作的是Observable#withLatestFrom。我不确定这是不是最好的方法,如果有一个更简单的方法会更好。这是我经常使用的工具。
在您的示例中,您可以执行以下操作:
button.withLatestFrom(source, (_, src) => src).subscribe(doSomething)
我只是删除按钮事件,因为在示例中您似乎并不关心它。
这是一个很好的措施。希望这与你想要的类似:https://jsfiddle.net/pkoq9n6b/