我想使用RemoteData来表示一些不是JSON的数据,我无法弄清楚自定义解码器的位置。我有这些类型:
Http.getString : String -> Request String
RemoteData.sendRequest : Request a -> Cmd (WebData a)
Foo.decode : String -> Result String (List Foo)
现在我想要一条ReceiveFoos (RemoteData String (List Foo))
消息来接收已经解码(或失败)的响应。我该怎么做?
或者,一般情况下,我可以以某种方式将String -> Something
解码器提供给Http.get
,类似于开箱即用的JSON解码案例吗?
答案 0 :(得分:6)
您可以使用expectStringResponse
使用自定义解码器构建自定义请求。
例如,这里是Http.get
的变体,它允许您指定接收完整字符串响应正文的解码器:
getStringResponse : String -> (Http.Response String -> Result String a) -> Http.Request a
getStringResponse url decoder =
Http.request
{ method = "GET"
, headers = []
, url = url
, body = Http.emptyBody
, expect = Http.expectStringResponse decoder
, timeout = Nothing
, withCredentials = False
}
(请注意,这看起来很像implementation of the JSON version, Http.get
)