如何在elm中使用HTTP 2.0.0避免Expect msg?

如何在elm中使用HTTP 2.0.0避免Expect msg?,elm,Elm,在elm的Http 1.0.0包中,我可以发送一个自定义请求,如: post : Endoint -> List (Http.Header) -> Http.Body -> Decoder a -> Http.Request a post url headers body decoder = Http.request { method = "POST" , headers = headers , url = url

在elm的
Http 1.0.0
包中,我可以发送一个自定义请求,如:

post : Endoint -> List (Http.Header) -> Http.Body -> Decoder a -> Http.Request a
post url headers body decoder =
    Http.request
        { method = "POST"
        , headers = headers
        , url = url
        , body = body
        , expect = Http.expectJson decoder
        , timeout = Nothing
        , withCredentials = False
        }
使用我上面写的
post
函数,我可以简单地用
解码器字符串调用它,在Http请求发送后,响应字符串将被解码并返回。时期无需创建类似以下内容的
Msg

type Msg
    = GotText (Result Http.Error String)
无需在
update
中编写分支来处理此
Msg

但是,从Http 2.0.0开始,
expect
参数的类型为
expect msg
,而不是
expect a
,这意味着现在需要编写
msg
变体和要更新的附加分支

我正在编写一个发出Http请求的
Api.elm
文件。但是,这意味着现在它必须有自己的
Msg
类型和
update
函数才能在这些请求响应后运行


我过去认为
Home.elm
应该只响应
Home.Msg
Home.update
的消息,而不是
Api.Msg
Api.update
。我错了吗?
Api.elm
是否应该有自己的
Msg
类型和
update
功能来更改其他页面?或者有更好的方法吗?

为了澄清我在问题中的解释:

Elm HTTP 2.0.0包中的自定义请求如下所示:

request : 
  { method : String
  , headers : List Header
  , url = String
  , body = Body
  , expect = Expect msg
  , timeout = Maybe Float
  , withCredentials = Maybe String
  }
  -> Cmd msg
request :
  { method : String
  , headers : List Header
  , url : String
  , body : Body
  , expect : Expect a
  , timeout : Maybe Float
  , withCredentials : Bool
  }
  -> Request a
在Http 1.0.0中,它看起来是这样的:

request : 
  { method : String
  , headers : List Header
  , url = String
  , body = Body
  , expect = Expect msg
  , timeout = Maybe Float
  , withCredentials = Maybe String
  }
  -> Cmd msg
request :
  { method : String
  , headers : List Header
  , url : String
  , body : Body
  , expect : Expect a
  , timeout : Maybe Float
  , withCredentials : Bool
  }
  -> Request a
不同之处在于,使用HTTP 2.0.0中的自定义请求时,我需要传入
Msg
来使用此请求

现在,我的问题是:我使用的是
Api.elm
文件。每次需要发出HTTP请求时,我都会从(比如)Login.elm调用
Api.request arg1 arg2…

由于
Api.elm
中的
request
函数需要一个
Msg
类型,在这种情况下,一个登录请求,我想我必须在
Api.elm
中定义
Msg
GotLogin
,然后通过在
Api.elm
中为
GotLogin
编写一个
update
分支来处理
GotLogin
将如何更新
login.elm

但是,我可以在
Login.elm
中定义
GotLogin
Msg
,并将其传递到
Api.request
。因为我在
Login.elm
中定义了
GotLogin
,所以我将在
Login.elm
的更新函数中放置一个
GotLogin
分支,而不是
Api.elm

这也适用于来自任何其他页面的任何其他请求类型(
Signup.elm
Home.elm
,…),这意味着
Api.elm
,不应该有自己的更新其他页面的
update
函数


Login.elm
拥有自己的
update
功能的整个要点是,它应该只受自己的
update
功能的分支的影响,不是来自
Api.elm

的函数,为什么不将
a->msg
函数传递给
Api
函数呢?这正是我到目前为止所做的,但现在我正在进行身份验证。因此,
Api.elm
定义了一个不透明的
Token
类型。要将此类型返回到
Signup.elm
,它必须发出两个Http请求,如果不使用
Api.Msg
Api.update
,我不知道如何返回@格伦,你说得对。我可以处理调用模块端的所有更新逻辑,这不会影响
令牌的透明度。谢谢大家!@glennsl@glennsl,如果回答了这个问题,你能把它添加到下面吗?否则人们(像我一样)会来这里试图回答这个问题:-)我也面临着同样的问题。不过我不明白解决办法。是否有人能提供一个详细的回复/示例,说明这项工作需要什么?