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
сообщ.