gpt4 book ai didi

http - 如何在 Elm lang 中批量执行多个 Http 请求(任务)

转载 作者:可可西里 更新时间:2023-11-01 15:13:02 27 4
gpt4 key购买 nike

我想在将某些内容呈现到页面之前加载用户配置文件,但整个用户配置文件由多个 HTTP 请求加载的不同部分组成。

到目前为止,我正在按顺序(一个接一个)加载用户配置文件

type alias CompanyInfo = 
{ name: String
, address: ...
, phone: String
, ...
}

type alias UserProfile =
{ userName: String
, companyInfo: CompanyInfo
, ...
}

Cmd.batch
[ loadUserName userId LoadUserNameFail LoadUserNameSuccess
, loadCompanyInfo userId LoadCompanyInfoFail LoadCompanyInfoSuccess
...
]

但这不是很有效。有没有一种简单的方法来执行一堆 Http 请求并只返回一个完整的值?

像这样

init = 
(initialModel, loadUserProfile userId LoadUserProfileFail LoadUserProfileSuccess)

....

最佳答案

您可以使用 Task.map2 实现此目的:

编辑:更新到 Elm 0.18

Task.attempt LoadUserProfile <|
Task.map2 (\userName companyInfo -> { userName = userName, companyInfo = companyInfo })
(Http.get userNameGetUrl userDecoder |> Http.toTask)
(Http.get companyInfoGetUrl companyInfoDecoder |> Http.toTask)

然后您可以删除单独的 LoadUserName... 和 LoadCompanyInfo... Msgs。在 Elm 0.18 中,Task.attempt 需要一个 Result Error Msg 类型来解决对单独的 Fail 和 Succeed Msgs 的需求,因此 LoadUserProfile 定义如下:

type Msg
= ...
| LoadUserProfile (Result Http.Error UserProfile)

map2 只有在两个任务都成功后才会成功。如果任何任务失败,它将失败。

关于http - 如何在 Elm lang 中批量执行多个 Http 请求(任务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39392469/

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