169 похожих чатов

Подскажите по Flow пожалуйста Вот у меня есть функция fun getFlow()

= flow { //do simething}

Далее где нибудь я начинают следить за flow:
getFlow().collect{

}

Так вот могу я как-то узнать что flow больше не будет имитить? Грубо говоря что функция getFlow закончила свое выполнение?

13 ответов

13 просмотров

Узнать где?

Anton-Potekhin Автор вопроса
Alexander Nozik
Узнать где?

уже нашел 😉 onCompletion

вообще рекомендуется делать не collect, а onEach{}.launchIn(scope). В этом случае возвращается Job и когда он закончен, тогда и прекратилось

Anton-Potekhin Автор вопроса
Alexander Nozik
вообще рекомендуется делать не collect, а onEach{...

а что так можно было ? 😉 Вот действительно не знал. Спасибо

Anton Potekhin
а что так можно было ? 😉 Вот действительно не знал...

Я тоже не так давно начал так делать, спасибо @why_oleg. Это реально удобнее.

onEach

Anton-Potekhin Автор вопроса
Alexander Nozik
onEach

точно 😉

Alexander Nozik
вообще рекомендуется делать не collect, а onEach{...

всё же это разные вещи для разных юзкейсов) в данном случае, если надо что-то сделать сразу после collect в том скоупе, где collect был запущен, то финт с launchIn не так полезен если же надо знать, что collect закончился извне - то другое дело

Oleg Yukhnevich
всё же это разные вещи для разных юзкейсов) в данн...

Да, немного разное. Но обычно коллектор в отдельном ланче запускается.

Alexander Nozik
Да, немного разное. Но обычно коллектор в отдельно...

наверно, даже не знаю, it depends всё же * collect - после него операция выполниться только если не будет ошибки, если надо и когда ошибку - нужен try * onCompletion - вызовется и при завершении с ошибкой и без и передаст ошибку в lambda, и потом, когда вызовется collect будет та же схема что сверху * launchIn - запустит в другом scope - и там уже в другом месте можно проверить, завершился с ошибкой или нет и доставать ошибку уже не так прям приятно) вот

Oleg Yukhnevich
наверно, даже не знаю, it depends всё же * collect...

Верно кроме последнего. Если есть Job, то достать ошибку не проблема.

Alexander Nozik
Верно кроме последнего. Если есть Job, то достать ...

там неудобно отделять, отменили или вылетела ошибка

Alexander Nozik
Верно кроме последнего. Если есть Job, то достать ...

тем более, единственный способ получить ошибку это либо обернуть в try ensureActive и словить ошибку, либо использовать Job.getCancellationException() - который помечен как internal

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта