rxjs Наблюдаемое слияние не работает должным образом - PullRequest
0 голосов
/ 04 июля 2018

Мне нужно получить этот результат для запроса POST:

{
"names": [
    {
        "id": "t3xcb9xAyX",
        "username": "Gennaro"
    },
    {
        "id": "Csdu65RKon",
        "username": "Marco"
    },
    ...
],
"createdAt":"04/07/2018 - 11.49.51"
}

поэтому я выполнил эту работу, используя rxjs: я создал два Observable (один для имен, один для созданного) и в конце слился:

const notObj = utils.getNotificationType(codeProduct, Parse);
const csvObj = utils.getNotificationType(codeProduct, Parse);

const query = new Parse.Query(notObj);
const dateQuery = new Parse.Query(csvObj).descending('createdAt');


const names = from(query.find())
    .map(el => el.map((e) => {
        return {
            id: e.id,
            username: e.get('username')
        }
    }))
    .mergeMap((arr) => Observable.of({
        names: arr
    }));

const lastUpdate = from(dateQuery.first())
    .map(res => moment(res.createdAt).format('DD/MM/YYYY - HH:mm:ss'))
    .map(res => {
        return {
            createdAt: res
        }
    });


merge(names, lastUpdate)
    .subscribe(
        (data) => res.send(serialize(data)),
        (error) => res.send(serialize(error)),
        () => console.log('complete')
    );

проблема в том, что в итоге слияния извлекают меня только "names". Я мог бы получить другой результат, используя оператор .zip(), но у меня есть массив JSON вместо объекта.

Мой вопрос: почему merge() не объединяет два результата, а только первый? Спасибо

1 Ответ

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

Это не то, что делает merge. Он объединяет наблюдаемые потоки, а не сами объекты. Вместо этого используйте forkJoin, который выдаст массив результатов, а затем объедините его с map:

const names$ = ...;
const lastUpdate$ = ...;

forkJoin(names$, lastUpdate$)
  .map(([ names, lastUpdate ]) => ({ names, lastUpdate }))
  .subscribe(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...