如何发出请求,然后再从该响应中获得一系列请求?

时间:2019-04-12 04:56:45

标签: angular typescript ionic-framework ionic3

我正在向服务器请求获取项目列表。

为简单起见,可以说第一个API请求返回一个Pokemon列表。

getPokemon()

"objects" :[
 { "name": "Bulbasaur", "id": "1234"}, 
 { "name": "Squirtle", "id": "4321" },
 ...
]

我需要做的是,对于返回的每个神奇宝贝,我都需要使用ID单独请求有关神奇宝贝的更多详细信息。

getPokemonDetails(id: "1234"

"data" : { 
   "age": "12", 
   "height": "2 feet", 
    ... }

图片我试图列出所有口袋妖怪的身高。提出父getPokemon请求后,我需要每个单独请求的详细信息。

每个请求都返回一个诺言。

我尝试过但无法使用的东西:

this.provider.getPokemon().then(results => {
   foreach pokemon in results {
       this.provider.getPokemonDetails(pokemon.id).then(detail => {
           myData.push(detail.height)
       })
   }
})

似乎与时间安排有关。

如何在Ionic 3中做到这一点?

似乎有一些事情让我惊讶:forkJoin, map, mergeMap ...我在寻找什么?

2 个答案:

答案 0 :(得分:0)

尝试一下:

this.provider.getPokemon().then(results => {
     results.map(pokemon => {
         this.provider.getPokemonDetails(pokemon.id).then(detail => {
              myData.push(detail.height);
         });
     });
});

答案 1 :(得分:0)

您可以使用forkJoin组合多个HTTP发送的请求。让我举个例子:

this.provider.getPokemon().flatMap(results => {
   const ids = results.objects.map(result => result.id)
   const observables = ids.forEach(id => this.provider.getPokemonDetails(id))
   return forkJoin(observables)
}).subscribe(result => console.log(result);

Stackblitz with similar use case this also contains promise example