У меня есть две наблюдаемые, которые я хотел бы дождаться результатов обеих, чтобы я мог отфильтровать результаты одной на основе другой. Индивидуально они работают:
this.allValues$ = this.store.select(selectors.getAllValues)
this.myId$ = this.store.select(selectors.myId)
и я могу отобразить их в шаблон с помощью асинхронного канала
Однако я хотел бы создать свойство класса, которое содержит фильтрованный массив. Если бы это был синхронный JS, что-то вроде
this.filteredResults = allValues.filter(value => value.id === myId)
zip
Я получу значения
this.filteredResults$ = zip(
this.store.select(selectors.getAllValues),
this.store.select(selectors.myId)
)
шаблон:
результаты: {{FilterResults $ | асинхронный | json}}
Но я не могу понять, как фильтровать, как я хочу. Я пытался связать pipe
с zip
:
.pipe(
tap((...args) => {
console.log({ args }) // only one result so no hope of dropping in `map` or `filter` here
})
)
Но это приводит к удалению массива allValues
из набора результатов. allValues
значительно больше, поэтому, вероятно, потребуется больше времени, и zip больше не ждет, пока все испустит, поэтому я думаю, pipe
не является решением, хотя кажется, что оно близко.
Как я могу получить доступ к обоим наборам результатов, отфильтровать их и поместить этот результат в наблюдаемое, которое я могу отобразить в шаблоне с помощью filteredResults$ | async | json
?