I'm using the pokeapi to get the data of 151 pokemon. Since the API doesn't have a route to get all pokemon, I have to send 151 asynchronous get requests (one for each pokemon).
Despite the data being queried in order, I'm noticing the pokemon are returning in random order, with a different order each time. What are some strategies I can use to prevent this and keep them ordered in order of the requests (#1 - #151)? I'm assuming this is due to the asynchronous nature of the requests. Async/await could be useful but I haven't been able to implement it successfully here.
pokedex.component.html:
<div class="container">
<div *ngFor="let pokemon of pokemons" class="pokemon-card">
<div>
<img src="{{ pokemon.sprites.front_default }}"/>
</div>
<span style="display:flex;">#{{pokemon.id}}</span>
<span>{{pokemon.name | titlecase}}</span>
</div>
</div>
pokedex.component.ts:
constructor(public _httpService: HttpService) { }
ngOnInit(): void {
this.getPokemon();
}
pokemons = [];
getPokemon() {
this._httpService.getPokemon().subscribe( async (data) => {
data.results.forEach((pokemon)=>{this.getPokemonDetails(pokemon.name)});
});
}
getPokemonDetails(pokemon) {
this._httpService.getPokemonDetails(pokemon).subscribe((data)=>{
this.pokemons.push(data);
});
}
http.service.ts:
constructor(private http: HttpClient) { }
pokemonsUrl = 'https://pokeapi.co/api/v2/pokemon';
getPokemon(): Observable<any> {
return this.http.get(`${this.pokemonsUrl}?limit=151`);
}
getPokemonDetails(name): Observable<any> {
return this.http.get(`${this.pokemonsUrl}/${name}`);
}