Есть ли способ завершить поток после пропуска окончательного значения?

Вы можете использовать .map() в массиве для выполнения функции для каждого элемента массива и вернуть что-то для этого. Итак, возьмите каждую строку в вашем массиве и используйте ее как ключ для получения значения из вашего объекта оценки.

const array = ["Bad", "reallyBad", "Good", "Neutral", "Good"];


const ratings = {
    "reallyBad": -10,
    "Bad": -5,
    "Good": 5,
    "reallyGood": 10
};

const ratingsArray = array.map(item => ratings[item] || 0);

console.log(ratingsArray);

1
задан buuchan 18 January 2019 в 22:15
поделиться

2 ответа

Вы можете иметь conditionSatisfied испускать исходное значение вместо логического значения и затем объединять его с наблюдаемой, которая завершается на основе условия:

const source = nonCompletingStream();
const conditionSatisfied = source.pipe(
    filter(val => meetsCriteriaToBeFinalValue(val)),
    shareReplay(),
    take(1)
);
const example = concat(
  source.pipe(
      takeUntil(conditionSatisfied)
  ),
  conditionSatisfied
)

Здесь продемонстрировано https: // stackblitz. ком / редактировать / rxjs-qydhh3

0
ответ дан jal 18 January 2019 в 22:15
поделиться

Изменяя ваш поток на горячее наблюдаемое, вы можете напрямую контролировать его жизненный цикл.

const source = nonCompletingStream().pipe(publish());

Начните подписку, подключив наблюдаемый источник:

const example = source.subscribe(...);
const subscription = source.connect();

И остановите подписку, отменив подписку наблюдаемого источника:

source.pipe(filter(meetsCriteriaToBeFinalValue)).subscribe(() => subscription.unsubscribe());

Живой пример:

[ 1111]
const { interval } = rxjs;
const { publish, filter } = rxjs.operators;

const source$ = interval(100).pipe(publish());
const stopCriteria = x => x === 3;

const example$ = source$.subscribe(console.log);

const subscription = source$.connect();

source$.pipe(
  filter(stopCriteria)
).subscribe(() => subscription.unsubscribe());
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.3.3/rxjs.umd.js"></script>

0
ответ дан ZahiC 18 January 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: