当前位置: 首页 > 知识库问答 >
问题:

组合多个流/观测值以使用映射运算符

严天逸
2023-03-14

我有两台服务器,具有独立的流/可观察对象,如何使这两台服务器使用相同的链,以便我可以使用switchMapflatMap操作符控制它们?

if (serverNumber == 1) {
  this.streamService.getStream('test 1')
    .pipe(
      map(image => console.log(image))
    ).subscribe();
}
else  {
  this.streamService.getFastStream()
    .pipe(
      map(image => console.log(image))
    ).subscribe();
}

例如,如果我从服务器获取,而getStream需要一段时间,并且在getFastStream完成后仍在进行中,我希望通过切换映射阻止第一个getStream的覆盖。我怎么能这么做?我是rxjs的新手,所以我尝试的可能不是它应该如何使用。

可观察的

  images$: Observable<string> = new Observable<string>();

然后,我必须将流推到图像$观察与运算符之一?

this.images$.pipe(
  switchMap(this.streamService.getStream(1))
)

模板:

<div class="section">
    Click to send a request ...
</div>
<div class="section">
    <button (click)="click(1)">Server 1</button>
</div>
<div class="section">
    <button (click)="click(5)">Server 2 (Longer)</button>
</div>

共有2个答案

公孙宇
2023-03-14

RXJSraceobserveable creator可能会有所帮助。

var server1$ = this.streamService.getStream('test 1');
var fastServer$ = this.streamService.getFastStream();

var fastest$ = race(server1$, fastServer$)
              .pipe(map(image=> console.log(image)));
fastest$.subscribe();
祖奇
2023-03-14

首先在fast observable上使用takeUntil操作符。其次,使用merge获取快速可观察结果,直到缓慢可观察结果开始出现。

import { merge } from 'rxjs';
import { takeUntil } from 'rxjs/operators';

const slow$ = this.streamService.getStream('test 1').pipe(
  map(image => console.log(image))
);

const fast$ = this.streamService.getFastStream().pipe(
  map(image => console.log(image)),
  takeUntil(slow$)
);

merge(
  fast$,
  slow$
).subscribe()

这里是一个StackBlitz演示演示。

 类似资料:
  • 我有一个简单的api请求,它向一个对象返回一个可观察的对象,该对象中有一组项,每个项中都有一个链接。因此,我想在当前异步流中直接获取链接后面的数据,但我收到一个CORS错误,错误是: 这是否可能与我当前的函数?还是我误解了一些基本概念?

  • 假设我有一个类的,每个类都有一个。 中的键是时间戳,值是分数。 我试图创建一个,它可以组合所有对象的地图,并输出带有唯一时间戳(Thes)和平均分数的。 我有这个代码,但它给我所有分数的总和,而不是平均值(类没有平均值方法)。 我想这可能不是一个简单的问题,所以在一个单一的中解决,所以一个带有唯一时间戳的和所有分数的的输出也可以。然后我可以自己计算平均值。 它它可能吗?

  • 由于我不想多次使用流来单独收集每个属性,也不想使用来收集每个属性,是否有任何方法可以用单个流来获得上述属性。

  • 我需要将另一个改装请求中的图像合并到其特定系列中。听起来很简单的任务把我带进了反应式的地狱,没有一丝希望。 具体来说,我还通过可观察创建服务,因为我需要获取身份验证令牌来创建服务。 我的尝试基于以下答案:https://stackoverflow.com/a/28418503/2192545. 我有点不知所措。我只是在Observable的Func2部分得到了“无法推断函数接口类型”。在IDE中,

  • 当使用 Declarative 样式是在许多类之间共享一些功能,例如一组公共列、一些公共表选项或其他映射属性。标准的Python习惯用法是让类继承自一个包含这些常见特性的超类。 当使用声明性映射时,通过使用mixin类,以及通过增加 registry.generate_base() 方法或 declarative_base() 功能。 下面是一些常见的混合成语的例子: from sqlalchem

  • 问题内容: 我有这样的课: 我想为每个MultiDataPoint生成 当然,在多个MultiDataPoints中,“键”可以相同。 因此,给定a ,如何使用Java 8流转换为? 这是我目前在没有流的情况下进行转换的方式: 问题答案: 这是一个有趣的问题,因为它表明有很多不同的方法可以达到相同的结果。下面我展示了三种不同的实现。 集合框架中的默认方法: Java 8向集合类中添加了一些与 St