我正试图以pokéapi为基础,用Elm对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 jsonOnPokemonLoaded是我的行为之一:OnPokemonLoaded (Result Http.Error Pokemon)。Pokemon.decoder是一个简单的json解码器:decoder : Decoder Pokemon。
我对埃尔姆还是新手,只是尝试了StartApp和特效。这个错误似乎很好地解释了这个问题,但我仍然有点不明白它应该如何工作。
那么,我应该如何正确地请求和解码json呢?
发布于 2016-03-11 12:36:29
没有必要使用Http.getString和parseMon。相反,您可以使用Http.get并传递您的Json解码器,然后将其映射到Result以获得您想要的功能:
fetchTest : Effects.Effects Action
fetchTest =
Http.get Pokemon.decoder testUrl
|> Task.toResult
|> Task.map OnPokemonLoaded
|> Effects.taskhttps://stackoverflow.com/questions/35937972
复制相似问题