假设我有一个从值数组创建的 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 中做到这一点? 谢谢!
最佳答案
我不会在单击按钮时进行订阅,而是将点击建模为一个流,如下所示:
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));
关于rxjs 一个序列多个订阅取x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36905588/