Как остановить Kotlin поток при возникновении определенного состояния - PullRequest
0 голосов
/ 28 января 2020

Я хочу отменить поток kotlin, если в коде возникло определенное условие.

Предположим, у меня есть метод, следующий как

fun test(): Flow<String> = flow {
    val lst = listOf("A", "B", "C")

    while(true) {
        lst.forEach { emit(it) }

    //If some condition occurs, need to return from here, else continue
    //How to stop flow here
    }
}

, и вызывающий его как

test().collect { println(it)}

Вопрос в том, как остановить поток, чтобы произвести что-либо при определенных условиях (от создателя потока или вне его)?

1 Ответ

1 голос
/ 28 января 2020
fun test(): Flow<String> = flow {
    val lst = listOf("A", "B", "C")

    while(true) {
        lst.forEach { emit(it) }

        if (someCondition) {
            return@flow
        }
    }
}

return@flow мгновенно возвращается из flow лямбда, поэтому поток будет прекращен. В качестве другого варианта вы можете просто break ваш while(true) l oop, когда возникнет ваше состояние.

...