榆树:连锁 Http.send 和 Http.get

Elm: Chain Http.send and Http.get

我(初学者)在尝试链接到我的 Elm 应用程序中的 HTTP 调用时遇到类型问题:

Http.send ... `Task.andThen` (\_ -> Http.get ...)

这是因为Http.sendreturn类型是Task RawError Response, Http.get return 类型是 Task Error value.

关于如何让它们协同工作有什么建议吗?

编辑 1:

也许 mapError 是解决方案?

编辑 2:

我不是说第一个调用失败了,我确定它有效。是编译器没有验证我的代码:

The right argument of `andThen` is causing a type mismatch.

135│     Http.send Http.defaultSettings config
136│>      `Task.andThen` (\_ -> Http.get (Json.Decode.list userJsonDecoder) "http://localhost:3000/")

`andThen` is expecting the right argument to be a:

    Http.Response -> Task Http.RawError a

But the right argument is:

    Http.Response -> Task Http.Error (List User)

您需要一种将 RawError 映射到 Error 的方法,然后您可以按照您在第一次编辑中建议的那样使用 Task.mapError。一种可能性是:

rawErrorToError : Http.RawError -> Http.Error
rawErrorToError rawError =
  case rawError of
    Http.RawTimeout -> Http.Timeout
    Http.RawNetworkError -> Http.NetworkError

Http.send Http.defaultSettings config
|> Task.mapError rawErrorToError
`Task.andThen` ...