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

Ребята а почему использование async методов в компонентах считается

плохим тоном?

9 ответов

17 просмотров

потому что ты к промису приводишь

Sergei-Sergeevich Автор вопроса
Denis Makarov
потому что ты к промису приводишь

да понимаю, а почему это плохо?

Sergei-Sergeevich Автор вопроса
Denis Makarov
потому что ты к промису приводишь

трудно противостоять желанию упростить код (например убрать пару строк и вложенность заменив подписку с take(1) на await .toPromise() в случае с каким-нибудь диалогом подтверждения

Sergei Sergeevich
да понимаю, а почему это плохо?

напишу чисто свое мнение 1) твой код становится не однотипным, местами промисы, местами потоки. 2) лично в моей практике возникало, что приходилось дальше по промису еще доп обработку добавлять, пришлось изменять сразу несколько компонент переделывая это на поток(так как промис передавался через несколько сущностей). 3) промисы тяжело отписывать, приходится передавать контроллеры для отмены. И если конкретно сейчас по каким-то непонятным причинам отписка не нужна, то это не значит, что через месяц требования не поменяются и она не понадобится, тогда выполняешь пункт 2 4) у toPromise есть особенность, если ты делаешь toPromise на поток/сабжект, который не комплитится, то промис так и зависнет в состоянии pending. Отсюда, чтобы понять, что промис реально резолвится нормально, надо изучить всю цепочку потоков

Sergei-Sergeevich Автор вопроса
Denis Makarov
напишу чисто свое мнение 1) твой код становится не...

Благодарю за развернутый ответ. я почему то был уверен что в случае с .toPromise() а так же с take(1)/first() отписка происхождит автоматически

Sergei Sergeevich
Благодарю за развернутый ответ. я почему то был ув...

она происходит, но важно понимать, что она может не успеть произойти на момент, когда данные уже не нужны. Например, компонент был удален. Еще есть нюансы с тестами и HMR. по toPromise нюанс такой, что например подписка на сабжект вернет значение только тогда, когда он будет закомплитен, те опять же надо точно знать, что поток завершается или вызывать тот же take(1), и только потом toPromise

Sergei-Sergeevich Автор вопроса
Denis Makarov
она происходит, но важно понимать, что она может н...

Спасибо! в тестах я вроде решаю за счет fakeAsync. а вообще toPromise использую в случае когда например нужно дождаться закрытия диалога или что то в этом роде. Но я пересмотрю свой подход, благодарю

Sergei Sergeevich
Спасибо! в тестах я вроде решаю за счет fakeAsync....

По отпискам рекомендую: https://medium.com/ngx/why-do-you-need-unsubscribe-ee0c62b5d21f https://www.youtube.com/watch?v=RhYUnc622qg

Sergei-Sergeevich Автор вопроса
Denis Makarov
По отпискам рекомендую: https://medium.com/ngx/why...

читал но уже давно, перечитаю пожалуй

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

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

а через 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
Карта сайта