假设我有一个由值数组创建的rxjs observable:
let obs = Observable.fromArray([1,2,3,4,5,6]);
点击某个按钮,我们这样做:
obs.take(2).toArray().subscribe(x => {
console.log('the value is:', x); // and the value will be [1,2]
})
再次单击该按钮,我们再次得到[1,2]。 然而,期望的行为是接收[3,4],然后[5,6]。
你会如何在rxjs中这样做? 谢谢!
答案 0 :(得分:3)
点击按钮时,我不是在订阅时取出订阅,而是将点击模型建模为如下所示:
const clicks = Rx.Observable.fromEvent(document.getElementById('trigger'), 'click');
您可以使用bufferWithCount(2)
以所需方式缩减obs
信息流。然后,您可以根据需要组合流。例如,如果您希望将每次点击与新设置匹配(1:1,而不跳过任何设置),则可以使用zip
:
const subscription = clicks.zip(obs.bufferWithCount(2), (x, y) => y)
.subscribe(x => console.log(x));