Elmish: обрабатывает ли Program.withErrorHandler случай ошибки Cmd.ofAsync?

Я пытаюсь регистрировать и регистрировать ошибки в каждом возможном месте в моем приложении Elmish (Fable).

Если я добавил обработчик журналирования с помощью Program.withErrorHandler, нужно ли также добавлять код журналирования в регистр Error каждого вызова cmd.ofAsync?

Stackru говорит, чтобы показать некоторый код, поэтому вот моя функция обновления состояния:

| 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?

1 ответ

Решение

Вы должны добавить код регистрации LookupZipCodeError: Program.withErrorHandler обрабатывает необнаруженные ошибки в update, а также Cmd.ofAsync на самом деле ловит ошибки ошибок вызова и оборачивает их в LookupZipCodeError сообщ.

Другие вопросы по тегам