Size: a a a

Kotlin Community

2020 December 11

AN

Alexander Nozik in Kotlin Community
Sergey Barmin
rabbit, kafka, consul, keycloak, prometheus
Ну это да. Но это уже не "просто REST"
источник

SB

Sergey Barmin in Kotlin Community
Alexander Nozik
Ну это да. Но это уже не "просто REST"
чего это не просто рест, в консуле конфиг, кролик/кафка обычная шина, прометей - мониторинг, кейклоак авторизация
источник

SB

Sergey Barmin in Kotlin Community
я бы сказал это не "Hello World" - REST
источник

SB

Sergey Barmin in Kotlin Community
но вполне себе "просто" REST
источник

AP

Anton Potekhin in Kotlin Community
Anton Potekhin
Вопрос по корутинам и флоу.
Вот у меня есть флоу которое я создаю с помощью билдера
flow {
     emit(getValueByIndex(1))
     emit(getValueByIndex(2))
     emit(getValueByIndex(3))
}

И тут конечно же getValueByIndex будут последовательно выполнятся и имитити результат. А как сделать чтобы getValueByIndex внутри flow выполнялись асинхронно и имитился результат сразу как только будет получен? getValueByIndex это suspend fun
господа спасите. Пока вижу для решения только использовать channelFlow но что-то не хотелось бы экспериментальные функции использовать
источник

с#

саша сок #KotlinGang... in Kotlin Community
Anton Potekhin
Вопрос по корутинам и флоу.
Вот у меня есть флоу которое я создаю с помощью билдера
flow {
     emit(getValueByIndex(1))
     emit(getValueByIndex(2))
     emit(getValueByIndex(3))
}

И тут конечно же getValueByIndex будут последовательно выполнятся и имитити результат. А как сделать чтобы getValueByIndex внутри flow выполнялись асинхронно и имитился результат сразу как только будет получен? getValueByIndex это suspend fun
flow {
   for(i in ...) launch {
       emit(getValueByIndex(i))
   }
}
источник

AN

Alexander Nozik in Kotlin Community
Sergey Barmin
масса возможностей отстрелить себе ноги вручную, там где тебе надо простое взаимодействие сервисов и уже опытные люди решили эту проблему в спринге - вот в этом и прелесть в  общем-то
Хорошо, убедил.
источник

с#

саша сок #KotlinGang... in Kotlin Community
Anton Potekhin
Вопрос по корутинам и флоу.
Вот у меня есть флоу которое я создаю с помощью билдера
flow {
     emit(getValueByIndex(1))
     emit(getValueByIndex(2))
     emit(getValueByIndex(3))
}

И тут конечно же getValueByIndex будут последовательно выполнятся и имитити результат. А как сделать чтобы getValueByIndex внутри flow выполнялись асинхронно и имитился результат сразу как только будет получен? getValueByIndex это suspend fun
ну или если надо порядок сохранить, то flow не нужен

val foos = mutableListOf<Defferred<T>>()
foos += async { getValueByIndex(1) }
foos += async { getValueByIndex(2) }
foos += async { getValueByIndex(3) }
foos.awaitAll()

и оно асинхронно выполнится и когда всё загрузится отдаст лист
источник

OY

Oleg Yukhnevich in Kotlin Community
саша сок #KotlinGang
flow {
   for(i in ...) launch {
       emit(getValueByIndex(i))
   }
}
так нельзя ж вроде
во первых, надо в coroutineScope это закинуть
во вторых, emit можно вызывать только из одного контекста, иначе будет ошибка FlowInvariant, или типа того
поэтому как раз channelFlow это то, что нужно
и не надо боятся эксперемтального :)
источник

AP

Anton Potekhin in Kotlin Community
саша сок #KotlinGang
ну или если надо порядок сохранить, то flow не нужен

val foos = mutableListOf<Defferred<T>>()
foos += async { getValueByIndex(1) }
foos += async { getValueByIndex(2) }
foos += async { getValueByIndex(3) }
foos.awaitAll()

и оно асинхронно выполнится и когда всё загрузится отдаст лист
мне как раз нужно чтобы не по порядку
источник

AP

Anton Potekhin in Kotlin Community
саша сок #KotlinGang
flow {
   for(i in ...) launch {
       emit(getValueByIndex(i))
   }
}
как написал @why_oleg  так не получится . В это я и сам уперся
источник

AP

Anton Potekhin in Kotlin Community
так что channelFlow только?
источник

с#

саша сок #KotlinGang... in Kotlin Community
Oleg Yukhnevich
так нельзя ж вроде
во первых, надо в coroutineScope это закинуть
во вторых, emit можно вызывать только из одного контекста, иначе будет ошибка FlowInvariant, или типа того
поэтому как раз channelFlow это то, что нужно
и не надо боятся эксперемтального :)
а почему тогда просто channel не использовать?
источник

OY

Oleg Yukhnevich in Kotlin Community
саша сок #KotlinGang
а почему тогда просто channel не использовать?
а смысл, если channelFlow как раз и использует канал внутри, только что чуть лучше, чем ты сам напишешь через канал )
источник

SB

Sergey Bezrukov in Kotlin Community
Rasul Kamolov
is there any docs or tuts that I can learn by reading or watching? It would be very helpful
I don't think they're exist as it's kind of 'early adopters' technology nowadays. In case you'll find some useful examples, please share links here.
источник

OY

Oleg Yukhnevich in Kotlin Community
Anton Potekhin
так что channelFlow только?
https://pl.kotl.in/gS6ugBYrU

вот пример с каналом и с channelFlow
обратите внимание на take(3) в первом варианте, он нужен, чтобы канал закрыть, может как-то иначе можно сделать, но я не догнал :(
с channelFlow оно автоматически закрывает канал когда скоуп заканчивается
источник

AP

Anton Potekhin in Kotlin Community
Oleg Yukhnevich
https://pl.kotl.in/gS6ugBYrU

вот пример с каналом и с channelFlow
обратите внимание на take(3) в первом варианте, он нужен, чтобы канал закрыть, может как-то иначе можно сделать, но я не догнал :(
с channelFlow оно автоматически закрывает канал когда скоуп заканчивается
спасибо. channelFlow действительно удобней.
источник

с#

саша сок #KotlinGang... in Kotlin Community
Oleg Yukhnevich
https://pl.kotl.in/gS6ugBYrU

вот пример с каналом и с channelFlow
обратите внимание на take(3) в первом варианте, он нужен, чтобы канал закрыть, может как-то иначе можно сделать, но я не догнал :(
с channelFlow оно автоматически закрывает канал когда скоуп заканчивается
в первом варианте можно сделать BroadcastChannel.asFlow
источник

OY

Oleg Yukhnevich in Kotlin Community
саша сок #KotlinGang
в первом варианте можно сделать BroadcastChannel.asFlow
зачем?
и это плохой совет, учитывая, что broadcastChannel скоро наверно выпилят вообще, потому что для них есть замена - StateFlow и SharedFlow
источник

с#

саша сок #KotlinGang... in Kotlin Community
Oleg Yukhnevich
зачем?
и это плохой совет, учитывая, что broadcastChannel скоро наверно выпилят вообще, потому что для них есть замена - StateFlow и SharedFlow
спасибо, не знал
источник