我想在将某些内容呈现到页面之前加载用户配置文件,但整个用户配置文件由多个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
...
]
Run Code Online (Sandbox Code Playgroud)
但那不是很有效.有一种简单的方法如何执行一堆Http请求并返回一个完整的值?
像这样的东西
init =
(initialModel, loadUserProfile userId LoadUserProfileFail LoadUserProfileSuccess)
....
Run Code Online (Sandbox Code Playgroud)
Cha*_*ert 11
你可以使用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)
Run Code Online (Sandbox Code Playgroud)
然后,您可以删除单个LoadUserName ...和LoadCompanyInfo ... Msgs.在Elm 0.18中,需要单独的Fail和Succeed Msgs
通过Task.attempt
期望Result Error Msg
类型来解决,因此LoadUserProfile
定义如下:
type Msg
= ...
| LoadUserProfile (Result Http.Error UserProfile)
Run Code Online (Sandbox Code Playgroud)
map2
只有在两项任务都成功后才会成功.如果任何任务失败,它将失败.
归档时间: |
|
查看次数: |
1495 次 |
最近记录: |