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

我怎么能在RxJS中使用Conconat运算符,但忽略第一个可观察到的所有排放

殷建弼
2023-03-14

假设我们有两个观察对象。

const obs1=计时器(1000);常数obs2=of(1,2,3)

如果我想等到obs1完成,我显然可以使用concat操作符。

表1。管道(混凝土(obs2))。订阅(console.log);

concat(obs1、obs2)。订阅(console.log);

它可以正常工作(保留顺序),但从第一个obs发出的“0”仍将被记录。有没有一种方法可以强制某些订阅的顺序,但忽略给定可观测数据的发射?(例如,只能看到“链”中最后一个可见值)。

在这种情况下,我知道预期会有多少值,所以我可以简单地使用skip/akeLast,但是我正在寻找一个通用的解决方案,它不需要我知道从可观察对象发出的元素的数量。

共有3个答案

袁鹤轩
2023-03-14

您可以SwitchMap或仅记录第二个可观察到的管道中的值:

const obs1 = timer(1000);
const obs2 = of(1, 2, 3);

obs1.pipe(
  concat(obs2.pipe(tap(val => console.log(val))))
).subscribe();

obs1.pipe(
    switchMap(_ => obs2)
).subscribe(console.log);
呼延珂
2023-03-14

使用CombineTest:

例子:

    import { timer, combineLatest } from 'rxjs';
   const timerOne$ = timer(1000, 4000);
   const timerTwo$ = timer(2000, 4000);
   const timerThree$ = timer(3000, 4000);
   combineLatest(timerOne$, timerTwo$, timerThree$).subscribe(
  ([timerValOne, timerValTwo, timerValThree]) => {

    console.log(Timer Three Latest: ${timerValThree}`
    );
  }
);

或者

import { timer, combineLatest } from 'rxjs';

const timerOne$ = timer(1000, 4000);
const timerTwo$ = timer(2000, 4000);
const timerThree$ = timer(3000, 4000);

combineLatest(
  timerOne$,
  timerTwo$,
  timerThree$,
  // combineLatest also takes an optional projection function
  (one, two, three) => {
    return `${three}`;
  }
).subscribe(console.log);
云慈
2023-03-14

您可以只使用ignoreElements()

concat(obs1.pipe(ignoreElements()), obs2).subscribe(...)

不管obs1是否发出任何下一个通知。

 类似资料:
  • 我想进行 HTTP 调用并将输出作为可观察的(这是简单的部分),然后立即进行另一个 HTTP 调用并忽略输出。 我不能使用switchMap操作符,因为第二个HTTP调用没有返回有用的东西。它只是返回“完成!”第一个调用返回我需要的复杂JSON。 我所做的,它的工作原理是订阅内部 HTTP 调用,我想知道是否有我可以使用的 RXJS 运算符: 有没有一个RxJS操作符,我可以使用它来代替再次订阅“

  • 我已经阅读了ReactiveX留档几次,仍然无法完全理解当观察者订阅可观察文件时会发生什么。 我们来看一个简单的例子: StackBlitz代码。 我的问题: 传递给可观察对象的

  • 问题内容: 如果我有一个对象,希望能够观察其他几个可观察对象,而不是所有相同类型的对象。例如,我希望A能够观察B和C。B和C完全无关,除了它们都实现Observable之外。 显而易见的解决方案是仅在update方法中使用“ if instanceof”,但很快就会变得混乱,因此我想知道是否还有其他方法? 问题答案: 与以前的建议类似,您可以将更新更改为。 这样您可以添加一种方法 对于您要观察的每

  • 我正在努力理解rxJs观察者/可观察的。 我有一个Angular应用程序,其中一个服务创建一个可观察的: 闲聊服务ts: 当聊天室中收到消息时。服务ts,消息(假定)是多播的: 两个组件以这种方式订阅可观察对象: 问题:只有一个(最后一个订阅的)收到消息。 问:我如何配置可观察到多播到所有订阅者?

  • 我正在学习RxJS,对于“听众”在哪里(在可观察的或观察者中),他们是如何订阅/取消订阅的,以及当观察者“不再对”可观察的“不感兴趣”时会发生什么,比如当你使用或。 对于第一部分——什么是订阅什么,什么是倾听者——我对这些陈述之间看似矛盾的地方感到困惑。从http://reactivex.io/rxjs/manual/overview.html我们读到观察者不是观察者的“听众” 这与addEven

  • 我想我一定是误解了一些基本的东西,因为在我看来,这应该是一个可观察事物最基本的情况,但在我的一生中,我无法从文件中找出如何做到这一点。 基本上,我希望能够做到这一点: 但是我一直没能找到像这样的方法。我将此用于单击处理程序,我知道他们有,但我正试图将其与React一起使用,我宁愿能够简单地在回调中更新数据流,而不是使用完全不同的事件处理系统。所以基本上我想要这个: 我得到的最接近的是使用,但这似乎