RXJS 运算符检查条件并在 true 时直接发出值

问题描述 投票:0回答:2

我正在寻找一个 RXJS 运算符,它接受值流并检查每个值是否符合特定条件。
如果此条件成立,则应忽略所有后续运算符,并且应按原样发出该值。
如果条件为 false,则以下所有运算符都应正常使用。

举个例子:

  const source$ = of(1, 2, 3, 4, 5);
  source$
     .pipe(
        theOperatorISearchFor((v) => v <= 4),
        map((v) => v + 100)
     )
     .subscribe((v) => console.log(v));

在这种情况下,我的输出将是:1, 2, 3, 4, 105

前 4 次我的条件为 true,因此所有后续操作(地图运算符)都将被忽略,并且只是发出值。
最后一个值不满足条件,因此输出 105。

有什么想法吗?

rxjs rxjs-observables
2个回答
0
投票

没有这样的运算符。但是,您可以合并 2 个不同的流。

const source$ = of(1, 2, 3, 4, 5);

const [small$, high$] = partition(source$, (v) => v <= 4);

merge(small$, high$.pipe(map((v) => v + 100))).subscribe((v) => console.log(v));

Stackblitz:https://stackblitz.com/edit/rxjs-sqmj2m?file=index.ts


-1
投票

您可以使用 takeUntil 管道运算符

我们检查是否不满足条件,然后我们完成主题,然后操作员将完成流!

import './style.css';

import { rx, of, switchMap, takeUntil, Subject } from 'rxjs';
import { tap, map } from 'rxjs/operators';

const found$ = new Subject<void>();

const source$ = of(1, 2, 3, 4, 5);
source$
  .pipe(
    tap((v: any) => (v > 4 ? (found$.next(), found$.complete()) : null)),
    takeUntil(found$),
    map((v: any) => v + 100)
  )
  .subscribe((v) => console.log(v));

堆栈闪电战

© www.soinside.com 2019 - 2024. All rights reserved.