Elmish:Program.withErrorHandler 是否处理 Cmd.ofAsync 的错误情况?
Elmish: Does the Program.withErrorHandler handle the error case of Cmd.ofAsync?
我试图在我的 Elmish (Fable) 应用程序中的每个可能位置捕获和记录错误。
如果我使用 Program.withErrorHandler 添加了一个日志记录处理程序,我是否还需要将日志记录代码添加到每个 cmd.ofAsync 调用的错误案例中?
Whosebug 说要显示一些代码,所以这是我的状态更新函数:
| ZipCodeChanged (ZipCode s) ->
let newZip, cmd =
if s |> ZipCode.looksLikeAZipCode then
let cmd = Cmd.ofAsync api.LookupZipCode (ZipCode s) LookupZipCodeResponse LookupZipCodeError
InvalidInput (ZipCode s, [ValidationError "Validating ZIP Code ..."]), cmd
else
InvalidInput (ZipCode s, [ValidationError "Please inputs a 5 digit numeric ZIP Code."]), Cmd.none
{ model with ZipCode = newZip }, cmd
| LookupZipCodeResponse (posOpt) ->
(... eliminated for brevity ...)
| LookupZipCodeError e ->
{ model with ZipCode = InvalidInput (ZipCode "", [ValidationError (sprintf "Error validating ZIPCode: %s" e.Message)]) }, Cmd.none
此代码将 ZipCode 视为 "InvalidInput",并在收到成功的 LookupZipCodeResponse 之前一直使用用户友好的验证消息。
但是如果对后端 API 的调用失败,我是否需要在 LookupZipCodeError 中添加我自己的日志记录代码,如果我已经提供了我提供给 Program.withErrorHandler 的日志记录功能?
您必须向 LookupZipCodeError
添加日志代码:Program.withErrorHandler
处理 update
和 Cmd.ofAsync
中的 未捕获 错误实际上 捕获 调用的错误情况并将它们包装在 LookupZipCodeError
消息中。
我试图在我的 Elmish (Fable) 应用程序中的每个可能位置捕获和记录错误。
如果我使用 Program.withErrorHandler 添加了一个日志记录处理程序,我是否还需要将日志记录代码添加到每个 cmd.ofAsync 调用的错误案例中?
Whosebug 说要显示一些代码,所以这是我的状态更新函数:
| ZipCodeChanged (ZipCode s) ->
let newZip, cmd =
if s |> ZipCode.looksLikeAZipCode then
let cmd = Cmd.ofAsync api.LookupZipCode (ZipCode s) LookupZipCodeResponse LookupZipCodeError
InvalidInput (ZipCode s, [ValidationError "Validating ZIP Code ..."]), cmd
else
InvalidInput (ZipCode s, [ValidationError "Please inputs a 5 digit numeric ZIP Code."]), Cmd.none
{ model with ZipCode = newZip }, cmd
| LookupZipCodeResponse (posOpt) ->
(... eliminated for brevity ...)
| LookupZipCodeError e ->
{ model with ZipCode = InvalidInput (ZipCode "", [ValidationError (sprintf "Error validating ZIPCode: %s" e.Message)]) }, Cmd.none
此代码将 ZipCode 视为 "InvalidInput",并在收到成功的 LookupZipCodeResponse 之前一直使用用户友好的验证消息。
但是如果对后端 API 的调用失败,我是否需要在 LookupZipCodeError 中添加我自己的日志记录代码,如果我已经提供了我提供给 Program.withErrorHandler 的日志记录功能?
您必须向 LookupZipCodeError
添加日志代码:Program.withErrorHandler
处理 update
和 Cmd.ofAsync
中的 未捕获 错误实际上 捕获 调用的错误情况并将它们包装在 LookupZipCodeError
消息中。