angular - 在 Angular 中进行嵌套 API 调用

标签 angular rxjs observable fork-join flatmap

我需要在我的 Angular 应用程序中进行嵌套的 http 调用。第一次调用返回 field 列表,然后使用每个 field ID 我必须进行多次 api 调用以获取每个 field 的详细信息。这是我的代码,

服务.ts

GetResponse(){
     return this.http.get('someurl')//Returns list of venues
     .map(res => res.json())
     .flatMap(
     (result) =>{
       return 
         Observable.forkJoin(result.response.groups[0].items.map
                          ((data) => this.getDetailss(data))
     )});
}


getDetailss(venues) {
  return this.http.get('some url'/venues.id)// returns details of single venue
}

组件.ts ,

this.service.GetResponse().subscribe(
(response)=> console.log(response),//Prints array of observables
(error)=>console.log(error)
);

我在我的组件中接收到一组可观察值。我如何以 json 形式从中检索数据?

最佳答案

如果您想要所有地点详细信息的数组,您可以使用combineLatest 运算符:

this.http.get('someurl')
    .map(res => res.json())
    .flatMap(result => {
        const venueRequests = [];
        for (const venue of result.someproperty) {
            venueRequests.push(this.http.get('someurl' + venue.id))
        }
        //This will change an Observable<Response>[] into an Observable<Response[]>
        return Observable.combineLatest(venueRequests);
    });

然后您可以简单地订阅它并添加 .map (res => res.json()) 然后您将获得一组 地点 详细信息。

关于angular - 在 Angular 中进行嵌套 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45454224/

相关文章:

javascript - 有没有办法转义 HTML 字符串然后在 Angular 中应用 html 标记?

Angular 2 RC4 到最新 - "Uncaught TypeError: Cannot read property ' prototype' of undefined"when extending

javascript - 从 Observable 获取对象属性的值

Angular/Rxjs 管道异步不适用于 ssr?

javascript - 如何按顺序调用两个 API 并将两者的数据作为单个 Observable 返回

angular - 错误 : ENOENT: no such file or directory, 打开 'google/protobuf/api.proto'

angular - 导入 json 文件以模拟我的测试数据

angular - Firestore + AngularFire2 分页(按范围查询项目 - .startAfter(lastVisible) )

angular - 使用 router-outlet 时,页面刷新后 Observable 不更新值

swift - 将事件绑定(bind)到 Observable<JSON> 的键