1 回答

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
更新
所以問(wèn)題實(shí)際上出在打字上。您不需要[]在Generation任何地方之后添加。因?yàn)闆](méi)有任何地方可以讓 API 用世代數(shù)組來(lái)響應(yīng)。
因此,[]從getGeneration1服務(wù)中 HTTP 的類(lèi)型化響應(yīng)的返回類(lèi)型和類(lèi)型中刪除。
請(qǐng)注意,Typescript 中的類(lèi)型僅用于編譯時(shí),它不會(huì)影響運(yùn)行時(shí)中的任何內(nèi)容,只是為了確保您使用正確的引用并在運(yùn)行前檢測(cè)錯(cuò)誤。
我在這里添加 getGeneration 函數(shù):
getGeneration1(): Observable<Generation> {
return this.http.get<Generation>(this.GetGenerationURL1)
.pipe(
tap(_ => console.log('fetched generations')),
catchError(this.handleError<Generation>('getGeneration1', []))
);
}
getGeneration2(): Observable<Generation> {
return this.http.get<Generation>(this.GetGenerationURL2)
.pipe(
tap(_ => console.log('fetched generations')),
catchError(this.handleError<Generation>('getGeneration2', []))
);
}
在組件中,您需要像這樣重構(gòu)它:
export class PokeApp implements OnInit {
gen1: Generation;
gen2: Generation;
generation : Generation;
constructor(private http: HttpClient, private gService:GenerationService) {
}
ngOnInit(){
this.getGeneration1();
this.getGeneration2();
this.gService.getPokemon_Species(this.generation.name);
}
getGeneration1(): void{
this.gService.getGeneration1().subscribe(gen =>{
this.gen1 = gen
this.generation = gen;
});
}
getGeneration2(): void{
this.gService.getGeneration2().subscribe(gen => this.gen2 = gen);
}
這是為了防止您仍然需要組件中的代碼在不鏈接我在舊答案中提供的響應(yīng)的情況下工作,但我建議重構(gòu)您的代碼,如下所示:
getGenerations() {
this.gService.getGeneration1()
.pipe(mergeMap(gen => {
this.generation = gen;
return this.gService.getGeneration2();
}))
.pipe(mergeMap(gen => {
return this.gService.getPokemon_Species(this.generation.name);
}))
.subscribe(response => console.log(response));
}
舊答案
您很需要使用mergeMap。它應(yīng)該是這樣的:
getGenerations() {
this.gService.getGeneration1()
.pipe(mergeMap(gen => {
this.gen1 = gen;
this.generation = gen[0];
return this.gService.getGeneration2();
}))
.pipe(mergeMap(gen => {
this.gen2 = gen;
return this.gService.getPokemon_Species(this.generation.name);
}))
.subscribe(response => console.log(response));
}
添加回答
舉報(bào)