【问题标题】:RxJS FlatMap and ConcatMap intermediate solution?RxJS FlatMap 和 ConcatMap 中间解决方案?
【发布时间】:2019-05-21 07:46:06
【问题描述】:

我有一个使用 rxjs 用 typescript 编写的应用程序,我使用 flatMap 返回一个包含 5000 个可观察对象的列表,但我不希望同时订阅它们。

我尝试使用 concatMap,但它让我的应用程序非常慢,因为它按顺序一个接一个地处理。

我有兴趣创建一个包含 10 个订阅的池,当一个订阅结束另一个开始时,这将只保持 10 个订阅同时处于活动状态。

我想我可以创建一个手动控制,但我想知道是否有更好的方法,使用其他类型的地图或策略。

【问题讨论】:

  • 为什么需要 5000 个 observables?你能添加更多关于你想要达到的目标的细节吗?
  • @Anas 我有一个 id 列表,需要通过蓝牙连接获取数据。
  • 尝试使用mergeMap - 它采用限制并发的concurrent 参数。 concatMap 使用 mergeMap 实现,并发为 1。
  • @cartant 这正是我想要的。其实 flatMap 是 mergeMap 的别名。

标签: typescript dictionary rxjs flatmap concatmap


【解决方案1】:

@cartant 的提示帮助我找到了解决方案,对于下面的代码,您可以使用 flatMap 或 mergeMap,因为它们是相同的。

this.service.getData(id).flatMap(data => {
  return Observable.of(data);
}, 10).do(value => {
  console.log(value);
})

这段代码只是为了传递如何使用flatMap/mergeMap的并发参数的想法。数字 10 是并发参数。

【讨论】:

    猜你喜欢
    • 2018-09-16
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多