有类型和任务
type Msg
= Fail String
| Success (Int, Int)
makeRequest =
let
req =
{ verb = "GET"
, headers = []
, url = "http://localhost:8080"
, body = empty
}
in
Task.perform Fail Success <| send defaultSettings req
Fail
构造函数的参数用于错误消息(仅"Error"
),Succeess
的第一个参数来自status
的{{1}},第二个参数是来自Http.Response
的{{1}}大小。
如何将value
转换为Http.Response
?
我正在查看Task Http.RawError Http.Response
和Task String (Int, Int)
,我不明白如何将它们合并。我是在正确的方式吗?
答案 0 :(得分:3)
是的,您可以使用Task.map
和Task.mapError
来获得结果。
首先,您需要一种方法来确定您的Http响应的大小。因为它可以是字符串或二进制blob,而blob是not yet supported,所以你可以定义一个这样的函数:
httpValueSize : Http.Value -> Int
httpValueSize val =
case val of
Text str -> String.length str
Blob blob -> Debug.crash "Blobs have no implementation yet"
现在您可以在任务中使用映射函数,如下所示:
send defaultSettings req
|> Task.map (\r -> (r.status, httpValueSize r.value))
|> Task.mapError (always "Error")
|> Task.perform Fail Success
您也可以在没有这样的映射函数的情况下执行此操作:
send defaultSettings req
|> Task.perform (always <| Fail "Error") (\r -> Success (r.status, httpValueSize r.value))