2017-03-24 1 views
2

Ich richte einen super einfachen http Aufruf an einen Endpunkt auf meinem Server, der eine JSON-Antwort zurückgibt - ein Objekt mit einer success prop, die ist ein Boolescher Wert. Hier ist der relevante Code:Elm: Funktion `send` erwartet Http.Request String aber es ist Http.Request Bool

getData : Model -> Cmd Msg 
getData { userId, data } = 
    let 
     url = 
      "/get-data?userId=" ++ userId ++ "&data=" ++ data 

     request = 
      Http.get url decodeGetData 

    in 
     Http.send GetDataResult request 


decodeGetData : Decode.Decoder Bool 
decodeGetData = 
    Decode.at [ "success" ] Decode.bool 

ich die folgende Fehlermeldung vom Compiler bekommen:

Http.send GetDataResult request 
         ^^^^^^^ 
Function `send` is expecting the 2nd argument to be: 
    Http.Request String 
But it is: 
    Http.Request Bool 

Was ist los hier los ist? Wie richte ich Http.send so ein, dass ein Bool anstelle einer Zeichenfolge erwartet wird? Ich weiß, dass das Basis-Setup meiner Anfrage korrekt ist, weil mein Code kompiliert, wenn ich die decodeGetData Funktion zu ändern:

decodeGetData : Decode.Decoder String 
decodeGetData = 
    Decode.at [ "success" ] Decode.string 

In diesem Fall habe ich erfolgreich die HTTP-Anforderung machen, aber dann bekomme ich einen Fehler, da der Erfolg prop auf die Antwort ist ein Boolescher anstelle einer Zeichenfolge.

Irgendwelche Zeiger? Prost!

+0

Ihre Fehlermeldung bezieht sich auf 'GrabCashResult', während das darüber liegende Code-Snippet 'GetDataResult' referenziert. Ist das beabsichtigt oder könnte das der Grund für den Kompilierungsfehler sein? –

+0

Nein, das ist nur mein Fehler beim Kopieren einer älteren Version des Fehlers und einer neueren Version des Codes. Der Fehler ist immer noch vorhanden, wenn sie gleich sind. (Bearbeitete Frage, um sie gleich zu machen) – otajor

+0

Gotcha. Können Sie auch die Definition von 'Msg' und/oder den' GetDataResult'-Konstruktor einbeziehen? Benötigt es ein Bool- oder String-Argument? –

Antwort

5

Der Code, den Sie eingefügt haben, sieht gut aus, was zu der Annahme führt, dass das Problem in einem Code liegt, den Sie nicht aufgelistet haben. Der Msg-Konstruktor GetDataResult sollte nämlich einen einzelnen Parameter vom Typ Result Http.Error Bool haben. Der Compilerfehler, den Sie erhalten haben, würde auftreten, wenn die Signatur stattdessen Result Http.Error String wäre.

Verwandte Themen