#angular #rxjs
Вопрос:
У меня есть два асинхронных потока:
users = new Subjectlt;User[]gt;(); groups$ = new Subjectlt;Rightsgt;(); mapped$ = new Subject();
Я хочу сопоставить первый поток со значением из второго. Используя императивный способ, я делаю это так:
users.foreach((user: User =gt; { user.value = groups.find((g) =gt; g.user == user.id)?.value });
Как это сделать с помощью RXJS, чтобы получить сопоставленный результат mapped$
?
Комментарии:
1. Вероятно, вы можете использовать mergeMap или forkJoin
2. Почему вы используете для этого потоки? Не похоже, что вам нужны потоки, массивы/списки подойдут просто отлично, нет?
Ответ №1:
Вы можете использовать combineLatest
для выделения, когда либо users$
или groups$
выбрасывается, а затем map
добавить группу каждому пользователю:
combineLatest([users$, groups$]).pipe( map(([users, groups]) =gt; users.map(user =gt; { user.value = groups.find(g =gt; g.user == user.id)?.value return user })) )