= flow { //do simething}
Далее где нибудь я начинают следить за flow:
getFlow().collect{
}
Так вот могу я как-то узнать что flow больше не будет имитить? Грубо говоря что функция getFlow закончила свое выполнение?
Узнать где?
уже нашел 😉 onCompletion
вообще рекомендуется делать не collect, а onEach{}.launchIn(scope). В этом случае возвращается Job и когда он закончен, тогда и прекратилось
а что так можно было ? 😉 Вот действительно не знал. Спасибо
Я тоже не так давно начал так делать, спасибо @why_oleg. Это реально удобнее.
onEach
точно 😉
всё же это разные вещи для разных юзкейсов) в данном случае, если надо что-то сделать сразу после collect в том скоупе, где collect был запущен, то финт с launchIn не так полезен если же надо знать, что collect закончился извне - то другое дело
Да, немного разное. Но обычно коллектор в отдельном ланче запускается.
наверно, даже не знаю, it depends всё же * collect - после него операция выполниться только если не будет ошибки, если надо и когда ошибку - нужен try * onCompletion - вызовется и при завершении с ошибкой и без и передаст ошибку в lambda, и потом, когда вызовется collect будет та же схема что сверху * launchIn - запустит в другом scope - и там уже в другом месте можно проверить, завершился с ошибкой или нет и доставать ошибку уже не так прям приятно) вот
Верно кроме последнего. Если есть Job, то достать ошибку не проблема.
там неудобно отделять, отменили или вылетела ошибка
тем более, единственный способ получить ошибку это либо обернуть в try ensureActive и словить ошибку, либо использовать Job.getCancellationException() - который помечен как internal
Обсуждают сегодня