RxJS - Полное наблюдение, когда приведенное выражение верно - PullRequest
0 голосов
/ 18 сентября 2018

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

Я могу сделать это так:

obs$.pipe(
  filter(value => value),
  first()
);

НоМне интересно, есть ли способ объединить операторы filter и first.

Я думал, что skipUntil будет хорошим выбором, но он пропускает, пока наблюдаемый не испустити до тех пор, пока не будет передано истинное значение.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Используйте оператор takeWhile:

const $observableThatCompletes = obs$.takeWhile((value) => true !== value);

Полученная наблюдаемая завершится, как только value станет true.

Вы можете использовать !value вместо true !== value, если хотите сопоставить все «истинные» значения.

0 голосов
/ 18 сентября 2018

Похоже, я должен был уделить больше внимания документам из first, что делает именно то, что я искал.

// RxJS v6+
import { from } from 'rxjs';
import { first } from 'rxjs/operators';

const source = from([1, 2, 3, 4, 5]);

//emit first item to pass test
const example = source.pipe(first(num => num === 5));

//output: "First to pass test: 5"
const subscribe = example.subscribe(val =>
  console.log(`First to pass test: ${val}`)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...