Условный конкат в RXJS? - PullRequest
       2

Условный конкат в RXJS?

0 голосов
/ 03 октября 2018

У меня есть два потока:

const sourceOne = of(1, 2, 3);
const sourceTwo = of(4, 5, 6);
const example = sourceOne.pipe(concat(sourceTwo)); //123456

Как вы видите, я объединил их безоговорочно.

Но оказывается, что мне нужно объединить их, только если первый элемент изsourceOne является "четным".(%2==0)

Вопрос:

Как я могу объединить sourceTwo в sourceOne, добавив условия относительно первого потока?

Я знаю, что могу создать внешний метод, который будет передаваться по конвейеру, но я не думаю, что это способ RXJS.

1 Ответ

0 голосов
/ 03 октября 2018

Если sourceOne является холодной наблюдаемой, как в вашем примере, тогда вы можете попробовать что-то в этом духе

const example = sourceOne.pipe(
  take(1),
  switchMap(d => d % 2 === 0 ? sourceOne.pipe(concat(sourceTwo)) : empty()),
)

Если вместо sourceOne это горячая наблюдаемая, вы можете попробовать что-то вроде этого

const sourceOneHot = of(1, 2, 3).pipe(share());
const exampleHot = sourceOneHot.pipe(
  take(1),
  switchMap(d => d % 2 === 0 ? concat(of(d), sourceOneHot, sourceTwo) : empty()),
);

Для создания горячего источника Observable вы можете использовать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...