Угловые RxJ получают только количество значений, а затем испускают

Что у меня есть: Сервис, в сервисе предмет и наблюдаемое, созданное на основе этого предмета. Я испускаю, например, 3 раза, используя «subject.next» из 3 отдельных компонентов и подписываюсь в другом компоненте.

Чего я хочу добиться? В моей подписке фильтр по свойству: получить только два первых выданных значения, получить значение с максимальным значением в свойстве, автоматически отказаться от подписки.

Что я пробовал:

const validValues = ['a','b']

this.myService.pipe(
   filter(x => validValues.some(y => y === x.name)),
   max((a,b) => a.value - b.value),
   take(2)
)

Take (2) не работает, по-прежнему получаются 3 значения. Какие-либо предложения ?

Порядок оператора имеет значение. Попробуйте переместить take(2) перед оператором max().   —  person Mr.FloppyDisk    schedule 02.03.2021

См. также:  Ошибки Rstan в R: ошибка в inDL и сбой LoadLibrary
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Mr.FloppyDisk

    Оператор max работает после завершения наблюдаемого источника. И поскольку наблюдаемый объект, инкапсулированный в subject, не завершится по умолчанию, упомянутый вами фрагмент никогда не будет сгенерирован, если вы не вызовете subject.complete (). Я предполагаю, что предметом является this.myService.

    this.myService.pipe(
       filter(x => validValues.some(y => y === x.name)),
       max((a,b) => a.value - b.value),
       take(2)
    ).subscribe(console.log)
    this.myService.complete()
    

    Сказав это, то, чего вы хотите достичь, можно сделать, поместив оператор take по крайней мере перед оператором max. Take отменит подписку после 2 выбросов, завершив источник, наблюдаемый для оператора max.
    Теперь, в зависимости от того, хотите ли вы получить 2 выброса после / до фильтрации, вы можете разместить take () после / до filter ().

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: