2016-05-23 7 views
5

Was ist der beste Weg, um eine leere (keine Zeichenfolge überhaupt) Antwort zu behandeln?Elm, JSON-Decoder: Wie dekodiert man eine leere Zeichenfolge?

Obwohl der Antwortcode 200 ist, gibt Elm einen Fehler zurück, da eine leere Antwort kein gültiger JSON ist.

Hier ist mein aktueller Code:

decodeAlwaysTrue : Json.Decode.Decoder Bool 
decodeAlwaysTrue = 
    Json.Decode.succeed True 

Http.send Http.defaultSettings httpConfig 
    |> Http.fromJson decodeAlwaysTrue 
    |> Task.perform FetchFail DeleteUserSuccess 

EDIT1:

Dies ist eine POST-Aktion, so kann ich nicht getString verwenden.

+0

Ich mag Ihre aktuelle Vorgehensweise. "Erfolg" sagt: "Egal, was Sie hier bekommen, es ist in Ordnung." –

+1

@ SørenDebois Nicht genau. Es wird erfolgreich ausgeführt, wenn der Antwortcode 2xx ist und die Antwort ein gültiger JSON ist. –

Antwort

3

Sie könnten die getString Funktion aus dem Http Modul verwenden. Dadurch erhalten Sie die Zeichenfolge zurück, die von der HTTP-Anforderung zurückgegeben wird, ohne zu versuchen, sie in einen Json-Wert zu konvertieren.

Wenn Sie stattdessen Http.send verwenden müssen dann so etwas tun Sie könnte:

Http.send Http.defaultSettings httpConfig 
    |> Task.perform FetchFail (always DeleteUserSuccess) 

Dies setzt voraus, dass DeleteUserSuccess ohne Typ-Parameter definiert werden geändert:

type Msg = 
    ... 
    DeleteUserSuccess 
0

Es Es sieht so aus, als ob du nie eine JSon Antwort bekommst, also wirst du wahrscheinlich besser mit Http.getString

umgehen können
type Result = FetchFail Error 
      | DeleteUserSuccess 

Http.getString address 
    |> Task.perform FetchFail (\s -> DeleteUserSuccess) 

Da der erfolgreiche Abruf keine Informationen enthält, können Sie ihn ignorieren und DeleteUserSuccess unabhängig vom Inhalt der Zeichenfolge zurückgeben.

+0

Siehe EDIT1 in meiner ersten Frage –