榆树StartApp解码http请求

时间:2016-03-11 10:38:06

标签: elm

我正在尝试使用StartApp作为基础,在Elm中将http请求解码为pokéapi。虽然我收到错误但我真的不知道如何修复:

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?

1 个答案:

答案 0 :(得分:4)

不需要使用Http.getStringparseMon。相反,您可以使用Http.get并传递Json解码器,然后将其映射到Result以获得您所需的功能:

fetchTest : Effects.Effects Action
fetchTest =
  Http.get Pokemon.decoder testUrl
    |> Task.toResult
    |> Task.map OnPokemonLoaded
    |> Effects.task