Лучший способ передать несколько лямбда-функций в Kotlin для обработки успеха / неудачи - PullRequest
0 голосов
/ 24 мая 2018

Новый в Kotlin здесь и пытается узнать лучший способ использования функций более высокого порядка и прохождения лямбд.Я создал этот метод, чтобы вызывать API и возвращать объект, созданный из строки, ИЛИ возвращать ошибку, если что-то пошло не так.

    fun getDeviceStatus(onSuccess: (Device) -> Unit, onFailure: ((String) -> Unit)? = null) {

        FuelClient.get(DEVICE_URL,
                success = { responseString ->

                    val adapter = MoshiUtil.moshi.adapter(Device::class.java)

                    val deivce= adapter.fromJson(responseString)!!

                    onSuccess(device)
                },
                failure = { onFailure?.invoke(it.message!!)})


    }

Я могу использовать эту функцию, например, так:

DeviceService.getDeviceStatus(
                { w ->
                    print("device")
                },
                { e -> print(e) })

Но меня немного беспокоит, что я не вижу названия функций, чтобы увидеть, что делает каждая функция.Мне интересно, есть ли более чистый / лучший способ сделать это, например

DeviceService.getDeviceStatus(){
            onSuccess{print("device")}
            onFailure{print("error")}
        }

или, может быть,

DeviceService.getDeviceStatus()
                .onSuccess{print("device")}
                .onFailure{print("error")}

Но это дает ошибки. Любые мысли о том, как лучше всего справиться сСлучай использования onSuccess / onFailure, который очень распространен? Thx

1 Ответ

0 голосов
/ 24 мая 2018

Вы можете прикрепить имя к каждой переменной в kotlin.Измените свой код следующим образом

DeviceService.getDeviceStatus(
                onSuccess = { w ->
                    print("device")
                },
                onFailure = { e -> print(e) })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...