rxjs, объединяющий 2 объекта из 2 разных наблюдаемых - PullRequest
0 голосов
/ 02 июля 2018

У меня есть 2 наблюдаемые, которые прослушивают вызов базы данных соответственно. Мне нужно объединить 2 массива вместе. Если у меня есть следующие массивы

array1 = [{id: 1, content1: "string"}, {id: 2, content2: "string"}, {id: 3, content3: "string"}]
array2 = [{id: 1, contentX: "string"}, {id: 2, contentY: "string"}, {id: 3, contentZ: "string"}]

Я хочу объединить их вместе, чтобы получить один наблюдаемый массив, подобный этому:

[{id:1, content1:"string", contentX:"string"}, {id:2, content2:"string", contentY:"string"}, {id:3, content3:"string", contentZ:"string"}]

У меня есть некоторый код, но я действительно запутался в том, как действовать, я не могу найти нужные операторы или правильно их связать, есть ли у кого-нибудь хорошее объяснение, как действовать? Это то, что я имею до сих пор, но буквально не знаю, как дальше.

    const observable1 = getDataFromDb1();
    const observable2= getDataFromDb2();

    observable1 .pipe(
        combineLatest(observable2),
        flatMap(x => {
            //what to do here???
        })
    ).subscribe(
        (value)=>{
            console.log(value);
        }
    )

Спасибо за ваше время

1 Ответ

0 голосов
/ 03 июля 2018

Я делаю здесь дикие догадки и предполагаю, что обе наблюдаемые исходные точки испускают свои значения в одном большом фрагменте. Если это так, вы просто хотите map оба выброса в пользовательские объединены один (в противном случае, пожалуйста, оставьте комментарий). E.g.:

const { of, combineLatest } = rxjs;
const { map } = rxjs.operators;

// simple merge-by-id
const mergeById = ([t, s]) => t.map(p => Object.assign({}, p, s.find(q => p.id === q.id)));

const db1$ = of([
  {id: 1, content1: 'string'},
  {id: 2, content2: 'string'},
  {id: 3, content3: 'string'},
]);

const db2$ = of([
  {id: 1, contentX: 'string'},
  {id: 2, contentY: 'string'},
  {id: 3, contentZ: 'string'},
]);

const all$ = combineLatest(db1$, db2$).pipe(
  map(mergeById)
);

all$.subscribe(console.log);
<script src="https://unpkg.com/rxjs@6.2.1/bundles/rxjs.umd.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...