0

我试图在我的 Elmish (Fable) 应用程序中的每个可能位置捕获和记录错误。

如果我使用 Program.withErrorHandler 添加了日志处理程序,是否还需要将日志代码添加到每个 cmd.ofAsync 调用的错误案例中?

StackOverflow 说要显示一些代码,所以这是我的状态更新函数:

| 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 的函数?

4

1 回答 1

1

您必须将日志记录代码添加到LookupZipCodeError:中Program.withErrorHandler处理未捕获的错误update,并Cmd.ofAsync实际捕获调用的错误情况并将它们包装在LookupZipCodeErrormsg 中。

于 2019-05-01T05:30:03.533 回答