Angular2 объединяет часть объектов - PullRequest
1 голос
/ 06 мая 2020

Мне нужно объединить два наблюдаемых одного и того же типа и вернуть тот же тип, наблюдаемый в функции Angular2.
Итак, все, что я хочу сделать, это:

из этого:

obs1.subscribe(obs => console.log(obs))
(where I get): 
{
   count: 10,
   array: <someObservable[]> 
}

и

obs2.subscribe(obs => console.log(obs))
(where I get): 
{
   count: 10,
   array: <someObservable[]> (different objects)
}

в:

{
   count: 10 (count always the same number),
   array: <someObservable[]> (combined array from obs1 and obs2)
}

Какой самый простой способ добиться этого? (Может быть, это просто даже младшему angular разработчику, но у меня это быстро и я новичок ie в этой сфере). Спасибо за совет.

--- UPDATE ---

из этой части кода:

const obs2 = obs1.pipe(
        switchMap(value => {
          return this._loadMoreTextSearchSub.asObservable()
          .pipe(pairwise(),
          map(params => this.getPagingParameters(params[0], params[1])),
          switchMap(request),
          map(response => response.packages),
          scan<SearchPackage[]>((all, current) => {
            return [...all, ...current];
          }, 
          value.packages
          ));
        }))
        .subscribe(data => console.log('sec', data));

Я получаю массив объектов. Как я мог обернуть этот массив в объект и установить дополнительное свойство - «count»?

Current:
[{...}, {...}, {...}, {...}]
Desired:
{count: some_number, array: [{...}, {...}, {...}]}

1 Ответ

2 голосов
/ 06 мая 2020

Если вам нужно вызвать Observables впоследствии, вы можете использовать mergeMap() для того же.

Допустим, вы сначала вызываете obs1, как только у вас есть результат obs1, вы вызываете obs2, затем объедините оба результата и верните.

obs1.pipe(mergeMap((firstResult) => {
    return obs2.pipe(map((secondResult) => {
        return { count: firstResult.count, array: [...firstResult.array, ...secondResult.array] };
    }))

})).subscribe((data) => {
    console.log(data);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...