angular - Kartlegging av Observable til en liste med objekter
Jeg har et REST-API som returnerer meg et JSON-array med data. På klientsiden bruker jeg denne koden for å lage objekter fra forespørselen.
public getNews(): Observable<News[]> {
return this.http.get(this.baseUrl + '/news')
.pipe(
catchError(this.handleError('getNews', []))
)
.map(res => {
let response: any = res;
return response.map((item) => new News(item));
});
}
Abonnerer :
this.restProvider.getNews().subscribe((news: News[]) => {
this.news = news;
});
Men hvordan kan jeg løse problemet når responsen ikke er et array, men bare ett element? Eller når responsen er feil, for eksempel uventede data fra API-et?
For øyeblikket gir applikasjonen min denne feilen i disse situasjonene:
response.map er ikke en funksjon
Svar #1
Følgende kodebit bør hjelpe deg med å håndtere feil:
this.restProvider.getNews().subscribe((news: News[]) => {
this.news = news;
}, (err) => {
console.log(err);
});
Du trenger bare å legge til feilfeilen som parameter i subscribe-funksjonen.
Nå over til ditt første spørsmål: Hva om svaret er et enkelt objekt? -> Signaturen til funksjonen vil alltid tvinge den til å returnere et array. Feilen vil bli generert på abonnementsiden. En enkel løsning på dette er å endre datatypen til svaret.
this.restProvider.getNews().subscribe((news:any) => {
this.news = news;
});
Svar #2
Kode, vil alltid returnere en matrise:
public getNews(): Observable<News[]> {
return this.http.get(this.baseUrl + '/news')
.pipe(
catchError(this.handleError('getNews', []))
)
.map(res => {
if(Array.isArray(res)) {
return res.map((item) => new News(item));
} else {
return [new News(res)];
}
});
}
