typescript - Angular HttpClient - Håndtere tomme og ikke-tomme responser


Forutsatt at vi har http:HttpClient, vil jeg gjerne tilby en tjenestekall-innpakningsmetode som følger:

public async post<T>(url: string, body: any): Promise<T> {
    // do some stuff

    const response = await this.http.post<T>(url, body, this.options).toPromise();

    // do more stuff

    return response
}

Dette fungerer som forventet for enhver T bortsett fra void. Oppførselen jeg håpet på (og fortsatt prøver å implementere) er å ikke returnere noen verdi (Promise<void>) når serveren ikke gir noe svar. Jeg lurer nå på hva som er den beste måten å implementere dette på uten å ha en egen funksjon for tomme responskropper.

Jeg antar at det ikke finnes noen måte å oppklare tvetydighet basert på den generiske typen? Jeg prøvde å se etter måter å gjøre det på, men det ser ikke ut til å finnes noen måte å gjøre det på, noe som gir mening gitt hva TypeScript gjør og hvordan det fungerer. For øvrig ville typen være tilgjengelig på kallstedet (som i, jeg ville kalt den metoden som service.post<void>(...) i tilfelle jeg forventer en tom responsbody).

En ting jeg lurte på er om jeg alltid kunne få det til å returnere en streng (responseType: "text") og deretter analysere JSON manuelt. Da kunne jeg sjekke status og responsstreng, hvis de var 200 og "" henholdsvis, ville jeg vite at jeg kan returnere undefined. Hvis det var den riktige måten å gjøre det på (og jeg er ikke sikker på at det er det), har jeg noen spørsmål:

  1. Ville manuell parsing av JSON hatt en ytelsesulempe?
  2. Hvilken metode bør jeg bruke for å analysere det? Hva bruker HttpClient?
  3. Hvordan kan jeg sørge for at feilbehandling fungerer på samme måte som om det skjedde fra innenfor HttpClient.post-metoden? Ideelt sett vil jeg ikke at det skal avvike fra feilmekanismen inne i HttpClient.post.

Eller er det en annen enkel måte som jeg overser for å implementere den ønskede metoden? Er noen av antakelsene mine feil?

Svar #1

Som det viser seg, er dette bare et problem hvis serveren returnerer 200. Hvis serveren returnerer statusen "no content" 204 (som er passende for et tomt svarinnhold), så returnerer post null. Jeg ville ha foretrukket undefined for å skille det fra et faktisk null-JSON-svar (siden null er et gyldig JSON-token), men det er som det er, og det som er, er godt nok for meg.

Relaterte artikler