首页 > 解决方案 > Rxjs 在第一次匹配时执行并退出 observable

问题描述

我有一个像这样的可观察的。执行可以在这里检查。

https://codesandbox.io

import { from, merge , } from 'rxjs';
import { filter, tap, share } from 'rxjs/operators';

const nextTrain$ = 
from(['Yellow', 'Green', 'Neon', 'Amber'])
.pipe(share());

const yellowTrain$ =
  nextTrain$
    .pipe(
      filter(color => color === 'Yellow'),
      tap(() => console.log(`Yellow Color Train is comming`))
    )

const greenTrain$ = nextTrain$
  .pipe(
    filter((color) => color === 'Green'),
    tap(() => console.log(`Green Color Train is comming`))
  )

const blueTrain$ = nextTrain$
  .pipe(
    filter((color) => color === 'Blue'),
    tap(() => console.log(`Blue Color Train is comming`))
  )

merge(yellowTrain$,
  greenTrain$,
  blueTrain$).subscribe();

目前,当我订阅合并语句时,打印出来的是

黄色火车来了

绿色火车来了

而我想要的是打印第一个匹配条件并停止其他所有内容。所以这意味着只需打印

黄色火车来了。

我如何在 rxjs 中做到这一点?

标签: rxjs

解决方案


只需添加第一个运算符:

merge(....).pipe(first())

推荐阅读