RXJS объединяет / объединяет два наблюдаемых массива с помощью "id" - PullRequest
3 голосов
/ 17 мая 2019

у меня есть два наблюдаемых

chat$: Observable<Chat[]>;
users$: Observable<User[]>;

где чат:

export interface Chat {
   user_id: string;
   message: string;
}

и пользователь:

export interface User  {
   user_id: string;
   username: string;
}

Теперь я хочу объединить две наблюдаемые в новую, например .:

threads$: Observable<Thread[]>;

где Threadis:

export interface Chat {
   user_id: string;
   username: string;
   message: string;
}

Я попытался слить код и код спагетти в карту, например:

threads$ = Observable.merge(chat$, users$).pipe( map( ??? ) );

но не работает ... я новичок в rxjs.

Как объединить два массива, используя свойство "user_id"?

1 Ответ

0 голосов
/ 17 мая 2019

Примите этот ответ как псевдокод, потому что я сделал это на своем телефоне

import {concatMap, toArray} from 'rxjs/operators';
import  {map, concat} from 'rxjs';

const fullMessage$ = (message) =>
    this.user$.get(message.user_id)
        .pipe(
            map( user => ({...message, name: user.name}))
        )

this.chat$
    .pipe(
        concatMap( (messages: Chat[]) =>
            concat(...messages.map(fullMessage$))
            )
        toArray()
        )
...