榆树:函数`send`期待Http.Request字符串,但它是Http.Request Bool

时间:2017-03-24 16:42:23

标签: http functional-programming elm

我正在为我的服务器上的端点设置一个超级简单的http调用,该端点返回一个JSON响应 - 一个带有success prop的对象,它是一个布尔值。以下是相关代码:

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

我从编译器中收到以下错误:

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

这里出了什么问题?如何设置Http.send以期望Bool而不是字符串?我知道我的请求的基本设置是正确的,因为如果我将decodeGetData函数更改为:

,我的代码会编译
decodeGetData : Decode.Decoder String
decodeGetData =
  Decode.at [ "success" ] Decode.string

在这种情况下,我可以成功发出http请求,但后来我收到错误,因为响应的成功道具是布尔值而不是字符串。

任何指针?干杯!

1 个答案:

答案 0 :(得分:6)

你粘贴的代码看起来都不错,这让我觉得问题在于你没有列出的代码。也就是说,Msg构造函数GetDataResult应该只有一个Result Http.Error Bool类型的参数。如果签名是Result Http.Error String,则会收到编译错误。