rxjs一个序列多个订阅需要x

时间:2016-04-28 04:57:54

标签: rxjs

假设我有一个由值数组创建的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中这样做? 谢谢!

1 个答案:

答案 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));

以下是一个工作示例:http://jsbin.com/vonegoq/1/edit?js,console,output