gpt4 book ai didi

elm - Elm 中的 Http.get 序列化

转载 作者:行者123 更新时间:2023-12-04 22:39:47 25 4
gpt4 key购买 nike

下面我有一个 button尝试加载远程内容...

import Post exposing (Post)
import Html exposing (..)
import Html.Events exposing (..)
import Http
import Json.Decode as Decode


type alias Model =
{ posts : List Post }


type Msg
= Search String
| PostsReceived (Result Http.Error (List Post))


update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
Search s ->
let
cmd =
(Decode.list Post.decode)
|> Http.get ("/posts?author=" ++ s)
|> Http.send PostsReceived
in
( model, cmd )

PostsReceived (Ok posts) ->
{ model | posts = posts }
! []

PostsReceived (Err error) ->
( model, Cmd.none )


view : Model -> Html Msg
view model =
button
[ onClick (Search "amelia") ]
[ text "Read posts by Amelia" ]

这是一个有效的 Elm 程序,只有一个小问题:API 不允许我按字符串搜索。这是 不是 允许
/posts?author=amelia  => Malformed Request Error

然而,这个 允许
/posts?author=2       => [ {...}, {...}, ... ]

所以我必须先找一个作者才能得到他/她的 id ,然后我可以使用作者的 id 获取帖子...
/author?name=amelia => { id: 2, name: "amelia", ... }
/posts?author=2

如何在下一个请求之后对一个请求进行排序?理想情况下,我想将作者缓存在模型中的某个位置,以便我们只请求我们以前从未见过的作者。

最佳答案

您可以使用 Task.andThen 将两个任务链接在一起。假设 /posts响应包含作者 ID,然后您可以在处理响应时将该作者 ID 添加到模型中。

    Search s ->
let
getAuthor =
Author.decode
|> Http.get ("/author?name=" ++ s)
|> Http.toTask
getPosts author =
(Decode.list Post.decode)
|> Http.get ("/posts?author=" ++ author.id)
|> Http.toTask
cmd =
getAuthor
|> Task.andThen getPosts
|> Task.attempt PostsReceived
in
( model, cmd )

我在 https://ellie-app.com/DBJc6Kn3G6a1 得到了这个编译如果这有帮助

关于elm - Elm 中的 Http.get 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com