Elm StartApp 解码 http 请求
Elm StartApp decoding http request
我正在尝试使用 StartApp 作为基础,在 Elm 中解码对 pokéapi 的 http 请求。虽然我遇到错误,但我真的不知道如何解决:
The right argument of (|>) is causing a type mismatch.
76│ Http.getString testUrl
77│ |> Task.map parseMon
78│> |> Task.map OnPokemonLoaded
(|>) is expecting the right argument to be a:
Task Http.Error (Result String Pokemon) -> a
But the right argument is:
Task Http.Error (Result Http.Error Pokemon) -> Task Http.Error Action
它所说的代码是:
-- Fetching test mon
testUrl : String
testUrl = "http://pokeapi.co/api/v2/pokemon/1/"
fetchTest : Effects.Effects Action
fetchTest =
Http.getString testUrl
|> Task.map parseMon
|> Task.map OnPokemonLoaded --line 78
|> Effects.task
parseMon : String -> Result String Pokemon.Pokemon
parseMon json = Json.Decode.decodeString Pokemon.decoder json
OnPokemonLoaded
是我的一个动作:OnPokemonLoaded (Result Http.Error Pokemon)
。 Pokemon.decoder
是一个简单的 json 解码器:decoder : Decoder Pokemon
.
我对 Elm 还是个新手,只是尝试了 StartApp 和 Effects。该错误似乎很好地解释了问题,但我仍然对它应该如何工作感到有些迷茫。
那么,我应该如何正确请求和解码 json?
不需要使用Http.getString
和parseMon
。相反,您可以使用 Http.get
并传递 Json 解码器,然后将其映射到 Result
以获得您想要的功能:
fetchTest : Effects.Effects Action
fetchTest =
Http.get Pokemon.decoder testUrl
|> Task.toResult
|> Task.map OnPokemonLoaded
|> Effects.task
我正在尝试使用 StartApp 作为基础,在 Elm 中解码对 pokéapi 的 http 请求。虽然我遇到错误,但我真的不知道如何解决:
The right argument of (|>) is causing a type mismatch.
76│ Http.getString testUrl
77│ |> Task.map parseMon
78│> |> Task.map OnPokemonLoaded
(|>) is expecting the right argument to be a:
Task Http.Error (Result String Pokemon) -> a
But the right argument is:
Task Http.Error (Result Http.Error Pokemon) -> Task Http.Error Action
它所说的代码是:
-- Fetching test mon
testUrl : String
testUrl = "http://pokeapi.co/api/v2/pokemon/1/"
fetchTest : Effects.Effects Action
fetchTest =
Http.getString testUrl
|> Task.map parseMon
|> Task.map OnPokemonLoaded --line 78
|> Effects.task
parseMon : String -> Result String Pokemon.Pokemon
parseMon json = Json.Decode.decodeString Pokemon.decoder json
OnPokemonLoaded
是我的一个动作:OnPokemonLoaded (Result Http.Error Pokemon)
。 Pokemon.decoder
是一个简单的 json 解码器:decoder : Decoder Pokemon
.
我对 Elm 还是个新手,只是尝试了 StartApp 和 Effects。该错误似乎很好地解释了问题,但我仍然对它应该如何工作感到有些迷茫。
那么,我应该如何正确请求和解码 json?
不需要使用Http.getString
和parseMon
。相反,您可以使用 Http.get
并传递 Json 解码器,然后将其映射到 Result
以获得您想要的功能:
fetchTest : Effects.Effects Action
fetchTest =
Http.get Pokemon.decoder testUrl
|> Task.toResult
|> Task.map OnPokemonLoaded
|> Effects.task