Как я могу сделать запрос с последующим массивом запросов из этого ответа? - PullRequest
0 голосов
/ 12 апреля 2019

Я обращаюсь к серверу за списком товаров.

Для простоты, скажем, первый запрос API возвращает список Pokemon.

getPokemon ()

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

Что мне нужно сделать, так это то, что для каждого из возвращенных покемонов мне нужно сделать отдельный запрос для получения дополнительной информации о покемонах с использованием идентификатора.

getPokemonDetails (id: "1234") * +1011 *

"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 голосов
/ 12 апреля 2019

Вы можете использовать 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 с аналогичным сценарием использования, он также содержит пример обещания

0 голосов
/ 12 апреля 2019

Попробуйте это:

this.provider.getPokemon().then(results => {
     results.map(pokemon => {
         this.provider.getPokemonDetails(pokemon.id).then(detail => {
              myData.push(detail.height);
         });
     });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...