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

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

= flow { //do simething}

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

}

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

13 ответов

4 просмотра

Узнать где?

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

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

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

подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
Слушайте, ещё такая интересная задачка. Сделан аудит действий пользователей через триггеры в базе, соответственно каждый пользователь имеет свой логин и пароль в базе. Это пре...
Сергей Бычков
7
возможно для форматирования TimeStampZ нужен другой механизм, не?
Роман Лях (rgreat)
13
Добрый день. Абракадабра в 12-й студии ввела новый тип поля БД TSQLTimeStampOffset, использую в постгресе timestampz и вот с 12-й версии начались чудеса! До этого поля times...
Delphi Photo
9
Коллеги, здравствуйте! А можно узнать ваше мнение относительно Wolfram Mathematica vs Julia? Просто у меня стоит выбор между тем, чтобы продолжить преподавать Wolfram Mathemat...
Илья Гаража
10
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Утра доброго. Просветите пожалуйста. Хочу сделать rest сервер на делфи. Посмотрел 3 фреймворка: dmvc, Mars, mormot. Ни в одном из них не упоминается ассинхронная обработка вхо...
Сергей Бычков
6
Обновленный chat тестили уже господа? Готовимся на заводы ? Простой проект на ларавель собирает за 1 ответ..
Jacov Borisov
14
Карта сайта