我正在寻找一个 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。
有什么想法吗?
没有这样的运算符。但是,您可以合并 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
您可以使用 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));