Elm StartApp 解码 http 请求

现男友 阅读:82 2025-01-19 22:14:33 评论:0

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

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.getStringparseMon 的使用是不必要的。相反,您可以使用 Http.get 并传递您的 Json 解码器,然后将其映射到 Result 以获得您想要的功能:

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


标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号