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

Всем привет. Если во Flow (SharedFlow, Channen.asFlow) после создания ничего

не добавлялось, то при вызове firstOrNull (и c first тоже) выполнение останавливается. Разве не должно придти null в таком случае?

11 ответов

20 просмотров

Если он создан как пустой, должен сразу вернуть

Пока он не был закрыт, нельзя сказать, что в нём нет первого элемента. Потому по спеке повода возвращать null нет.

Alidibir-Akhbulatov Автор вопроса
Alidibir Akhbulatov
screenshot вот пример, до println не доходит даже

SharedFlow вроде никогда не бывает пустой. Это значит, он всегда будет ждать. Пустой тут значит закрытый

Alexander Nozik
SharedFlow вроде никогда не бывает пустой. Это зна...

не бывает. он никогда не заканчивается, там просто суспендится до момента пока не придёт значение

Alidibir-Akhbulatov Автор вопроса
Andrew Mikhaylov
Пока он не был закрыт, нельзя сказать, что в нём н...

т.е. лучше чтобы дальнейшее выполнение кода просто остановилось?

Alidibir Akhbulatov
т.е. лучше чтобы дальнейшее выполнение кода просто...

Я не знаю, что вам там лучше, зависит от задачи. К примеру, если нужно дождаться значение, first вполне подходит.

Alidibir-Akhbulatov Автор вопроса
Andrew Mikhaylov
Я не знаю, что вам там лучше, зависит от задачи. К...

с вашим примером, да, подходит. но как мне быть, если нужно получить последнее значение из flow, чтобы вернуло null, если ничего не добавлялось?

Alidibir-Akhbulatov Автор вопроса
Aλex Sokol
не бывает. он никогда не заканчивается, там просто...

ок, но как мне в таком случае получить null, если ничего не было добавлено во flow? firstOrNull из-за этого сейчас останавливает выполнение кода

Alidibir Akhbulatov
с вашим примером, да, подходит. но как мне быть, е...

Я пока не игрался со StateFlow/SharedFlow, но выглядит, будто для последнего можно забрать значения из свойства replayCache.

Alidibir Akhbulatov
ок, но как мне в таком случае получить null, если ...

это же замена колбеку. если вы хотите получать изменения, то пожалуйста val job = launch { flow.collect { } } job.cancel() // если надо этот самый "коллбек" убрать

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта