Хорошая статья, большое спасибо.

Вам почти удалось убедить меня использовать «асинхронный канал», но у меня остались некоторые моменты, которые, кажется, не были описаны в вашей статье.

Так что я поиграю в адвоката дьявола в следующих нескольких строках :)

Ваш пример с отпиской выглядит очень многословно, согласен. Но все могло быть гораздо проще:

Как по мне, такой подход выглядит довольно прямолинейно. Да, нужно не забыть отписаться, но как по мне, это не имеет большого значения и легко запоминается. Каждый раз, когда вы пишете «подписаться», добавляйте это к this.subs$.

Мы можем пойти еще дальше и создать сниппет для IDE/интерфейса/базового класса или даже декоратор, чтобы автоматизировать это. Но мой опыт показывает, что это становится отличной привычкой для всех программистов и даже учит их думать о том, что они делают, а не просто полагаться на магию Angular (что потрясающе).

Представьте себе случай, когда для приведенного примера мы решили показать количество Todos вверху и внизу страницы. Если вы используете «асинхронный канал», вам нужно изменить DOM (даже с ng-контейнером) и, кроме того, необходимо помнить, что вам не нужно подписываться более одного раза. И поэтому этот аргумент кажется мне очень слабым.

Еще один момент — модульное тестирование.

Если я пишу компонент и хочу его протестировать, то в случае использования метода .subscribe() достаточно установить свойство прямо из теста (и вызвать .flush()) и вот мы идем, мы можем проверить, что показывает шаблон. Это просто и понятно.

В случае «асинхронного | трубы» Мне нужно подумать о мокировании хранилища (в случае NgRx) для каждого теста. Инструменты для этого, конечно, есть. Но как разработчик я хочу протестировать поведение, которое я реализую. Я не хочу тестировать, как работает NgRx, потому что в NgRx уже есть для этого юнит-тесты.

В конце концов, я фанат баланса. И даже если предположить, что хорошие привычки делают вас сильнее, я понимаю случаи, когда использование обоих способов имеет смысл.

Я надеюсь, что мои пункты были полезны. Еще раз спасибо.