【发布时间】:2019-03-25 14:53:36
【问题描述】:
我有一个 http get 请求来获取类似的数组
[
{name: 'name1', id: 1, specialProp: [] },
{name: 'name2', id: 2, specialProp: [] }
]
我需要获取每个数组项,获取一个 id 并向服务器发送请求以获取一些信息。结果应写入属性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。 有人可以帮我解决这个问题吗?:)
【问题讨论】:
-
请把你的代码放在 ``` lang-js 和 ``` 之间以获得更好的可读性。详情见"formatting help"
-
这可能会有所帮助:stackoverflow.com/a/53109081/9386929
-
@nircraft,我已经检查了文章,但我无法理解你的意思,这篇文章对我有什么帮助((((也许,你可以向我提供你的答案的更多细节?我收到新数据,但我无法获得初始数组,因为流给了我最后一个流元素。