榆树:连锁 Http.send 和 Http.get
Elm: Chain Http.send and Http.get
我(初学者)在尝试链接到我的 Elm 应用程序中的 HTTP 调用时遇到类型问题:
Http.send ... `Task.andThen` (\_ -> Http.get ...)
这是因为Http.send
return类型是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` ...
我(初学者)在尝试链接到我的 Elm 应用程序中的 HTTP 调用时遇到类型问题:
Http.send ... `Task.andThen` (\_ -> Http.get ...)
这是因为Http.send
return类型是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` ...