В RxJava / RxKotlin, каковы различия между возвратом Completable.error (Exception ()) и броском? - PullRequest
0 голосов
/ 14 ноября 2018

Каковы различия в следующих случаях:

fun a(params: String) = Completable.fromAction {
        if (params.isEmpty()) {
            throw EmptyRequiredFieldException() 
        }
    }

VS

fun b(params: String) = if(params.isEmpty()) 
       Completable.error(EmptyRequiredFieldException()) 
else 
       Completable.complete()

Особенно в контексте Android, если это имеет значение (даже если я не думаю, что этоделает) Спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018

Согласно документации ,

Если действие вызывает исключение, соответствующий Throwable доставляется в нисходящий поток через CompletableObserver.onError (Throwable), за исключением случаев, когда нисходящий поток имеетраспоряжаться этим Completable источником.В этом последнем случае Throwable доставляется в глобальный обработчик ошибок через RxJavaPlugins.onError (Throwable) как исключение UndeliverableException.

Таким образом, оба описанных вами способа похожи (кроме случаев, когда нисходящий поток утилизировал).Обратите внимание, что первый подход (с исключением вручную) позволяет изменить поведение Completable во время выполнения.И второй - статически определенный, когда вы возвращаете определенный тип Completable и не можете его изменить.

Что выбрать, зависит от ваших потребностей.

...