我需要发出第一个HTTP请求并从对象的响应数组中获取。 然后,我需要对数组中的每个对象(可能在循环中)发出HTTP请求,以获取更多信息。所有这些都在Angular内部。我尝试使用管道,但有一些困难。
答案 0 :(得分:0)
您的解释非常模糊,没有伪代码示例或您尝试执行的实际示例,这很难回答。
但是我收集到的是您需要的:
API调用1:
{ ids: [1, 2, 3] }
API调用2获得一个ID(api(1),api(2),api(3)等)并返回:
{ something: 'else', id: 1 }
在RxJS中,您希望为每个获得的ID switchMap
,以便将订阅切换到新的Observable。如果您希望所有这些都在它们进入时进入,则可以merge
。如果您希望它们按可预期的方式进入,那么您可以concat
。
基本示例:
this.http.get<{id: number[]}>('api1').pipe(
switchMap(ids => {
return concat(ids.forEach(id => {
return this.http.get<{ something: string, id: number}>('api2/' + id)
})
}).subscribe(console.log)
答案 1 :(得分:0)
基本上,您可以通过将值从内部Observable中拉出并将其传递回父流来对嵌套的api调用使用mergeMap / flatMap。
就像下面答案中的示例一样,如果您必须先进行嵌套调用以获取用户,然后再获取用户的偏好,则可以使用以下平面图。
ngOnInit() {
this.userService.getUser().pipe(
tap(u => this.user = u),
flatMap(u => this.userService.getPreferences(u.username))
).subscribe(p => this.preferences = p);
}