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)];
     }
  });
}

Relaterte artikler