rxjs 一个序列多个订阅取x

标签 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 中做到这一点? 谢谢!

最佳答案

我不会在单击按钮时进行订阅,而是将点击建模为一个流,如下所示:

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

关于rxjs 一个序列多个订阅取x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36905588/

相关文章:

javascript - 如何捕获请求错误,然后打开模态,然后在模态关闭时使用 RxJS 重试

javascript - 仅观察到一次火灾

angular - 在 Angular 4 Typescript App 的回调中运行时调试期间未定义 'this.variable'

javascript - 转换 RxJS 5 Rx.Observable.timer(3000).mapTo({ id : 1 }) to RxJS 6?

带有 debounceTime 的 Angular HttpClient 请求不会等待 dueTime

rxjs - 使用 .next 方法时出错

javascript - 取消订阅 Observable 的所有监听器

javascript - RxJS - 将 Observable 分成两部分,等待第一个完成

angular - RXJS - Angular - 取消订阅主题

typescript - 如何枚举同步可观察对象?