我正在向服务器请求获取项目列表。
为简单起见,可以说第一个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
...我在寻找什么?
答案 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