Это предварительный просмотр службы:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { tap, switchMap } from 'rxjs/operators';
import { forkJoin } from 'rxjs';
@Injectable()
export class PokemonService {
private baseAPIUrl = 'https://pokeapi.co/api/v2/';
constructor(private httpClient: HttpClient) {
}
public getPokemonByName(name: string) {
return this.httpClient.get(`${this.baseAPIUrl}pokemon/${name}`)
.pipe(
switchMap((pokemon: any) => {
return forkJoin({
types: forkJoin(this.generateRequestsForTypes(pokemon.types))
})
}, (pokemon, result) => {
pokemon.types = result.types;
return pokemon;
}),
)
}
private getPokemonTypeByUrl(url: string) {
return this.httpClient.get(url);
}
private generateRequestsForTypes(types: any[]) {
return types.map((type) => this.getPokemonTypeByUrl(type.type.url))
}
}
Конечно, вы должны добавить типы, но я думаю, что это может быть хорошим началом.
Будьте осторожны с количеством запросы, потому что каждое вложенное свойство может быть запросом.
Использовать функцию выбора результата (последний аргумент для оператора switchMap в приведенном выше примере).
stackblitz