Angular Observable метод подписки возвращает значения не по порядку - PullRequest
0 голосов
/ 10 апреля 2019

Я работаю над Pokedex, используя PokeAPI. Я получаю массив эволюции покемонов, который выглядит следующим образом.

https://pokeapi -215911.firebaseapp.com / апи / v2 / эволюция цепи / 10

Затем я пытаюсь вернуть модель, подписавшись на другой метод для возврата спрайтов покемонов. Моя проблема заключается в том, что метод подписки заканчивается в неправильном порядке, поэтому я получаю цепочку, которая иногда идет Венусавр> Бульбазаур> Ивисаур вместо Бульбазаура> Ивисаура> Венусаура. Как я могу получить их в правильном порядке?

private loopThroughEvolutionChain(chain: any): any {
    let evoChain: PokemonEvolution[] = [];
    let evoData = chain.chain;
    let index: number = 1;

    do {
      let evoDetails = evoData['evolution_details'];

      this.getPokemonEvolutionDetails(evoData.species.name).subscribe((pkmn: any) => {
          evoChain.push(new PokemonEvolution(index, pkmn.name, pkmn.sprites.front_default, pkmn.sprites.front_shiny));
          index++;
      });

      evoData = evoData['evolves_to'][0];
    } while (!!evoData && evoData.hasOwnProperty('evolves_to'));

    return evoChain;
  }

Обновлен 04.11.19 с getPokemonEvolutionDetails

private getPokemonEvolutionDetails(name: string) {
    let apiUrl = `${this.apiBaseUrl}/pokemon/${name}`;

    return this._httpClient.get(apiUrl).pipe(
      map((response: any) => {
        return response;
      })
    );
  }
...