У меня есть запрос http get для получения массива, подобного
[
{name: 'name1', id: 1, specialProp: [] },
{name: 'name2', id: 2, specialProp: [] }
]
Мне нужно получить каждый из элементов массива, взять идентификатор и отправить запрос на сервер, чтобы получить некоторую информацию.Результаты должны быть записаны в свойство specialProp
.После этого мне нужно взять массив реквизита specialProp
и для каждого элемента получить некоторые данные, поместить его в anotherSpecialProp
.В конце концов у меня должен быть окончательный массив типа
[
{name: 'name1', id: 1, specialProp: [
{name: 'c', anotherSpecialProp: []},
{name: 'd', anotherSpecialProp: []}
]},
{name: 'name2', id: 2, specialProp: [
{name: 'a', anotherSpecialProp: []},
{name: 'b', anotherSpecialProp: []}
]}
]
У меня есть код:
this.http.get(url)
.pipe(
switchMap((mainItemArr: any) => from(mainItemArr)),
mergeMap((mainItem: any): any => {
return this.getSomeInfo(mainItem.Id) //another http get request
.pipe(
map((data: any): any => {
return Object.assign(mainItem, { specialProp: data })
}),
switchMap((mainItemArr: any): any => from(mainItemArr.specialProp)),
concatMap((item: any): any => {
return this.getSomeOtherInfo(item.Id) // one more http get request
.pipe(
map((data: any): any => Object.assign({}, task, { anotherSpecialProp: data }))
)
}),
)
})
)
Так что при подписке я получаю только элементы, а не весь mainItemArr.Может кто-нибудь помочь мне с этой проблемой? :)