Какая альтернатива в сопрограммах для `share ()` `RxJava`? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть файл конфигурации. Я получаю его и в результате получаю заголовки и список запросов: Строка и на основе запросов я должен реализовывать различные запросы. Я имею в виду, что у меня есть запрос1 для конфигурации и на основе результата запроса1.объединить его с request2, request3….и эти комбинации, которые я хочу провести параллельно, я знаю, что могу достичь этого с помощью RxJava, используя share(), но как я могу сделать это с сопрограммами?

1 Ответ

0 голосов
/ 01 марта 2019

Подумайте об этом без сопрограмм. Что бы вы сделали, если бы функции не были приостановлены и были просто обычными функциями?

Вы можете сохранить значения, которые вы передаете, в переменной и проверить, если вы ужекэшируйте его. Если у вас есть, вы можете просто вернуть значения, в противном случае вычислить эти значения.

Если у вас есть какая-то продвинутая логика, которую нужно слушать (например, Subject s в RxJava), вы можете использоватьKotlin Coroutines Channel s.

Для создания канала вы можете использовать Channel() или ConflatedBroadCastChannel() или другие варианты.Если вы хотите, чтобы ваш канал был точно таким же, как PublishSubject RxJava, вы можете использовать ConflatedBroadCastChannel:

val broadCastChannel = ConflatedBroadcastChannel<Int>()

Вы можете использовать broadCastChannel.offer(value) для отправки значений в канал.

Для получения значений изКанал, вы можете использовать простой цикл для каждого:

for (i in broadCastChannel.openSubscription()) {
       //your values
}
...