Наблюдаемая лучшая практика - PullRequest
0 голосов
/ 24 апреля 2019

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

Я вижу два способа сделать это, либо напрямую подписавшись на мою наблюдаемую, либо используя оператор pipable.

Согласно вашему опыту / знаниям, что является лучшей практикой?

1-й подход (прямая подписка):

this.myObservable$.subscribe(value=> {
  this.myValue = value;
});

2-й подход (с использованием оператора трубопровода):

this.myObservable$.pipe(
    tap(value=> this.myValue = value)
  ).subscribe();

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Я думаю, что оба действительны, но в этом конкретном случае я бы использовал 1-й подход и выполнял работу в блоке подписки. Причина в том, что цель яснее.

«tap» предназначен для создания побочных эффектов, но вы не делаете здесь побочных эффектов, так как после нажатия больше нет логики. То, что вы делаете, использует распакованное окончательное значение, чтобы сделать что-то, и для этого предназначен блок подписки.

0 голосов
/ 24 апреля 2019

Я думаю сделать это в pipe, если локальная переменная должна быть обязательно обновлена.У меня может быть несколько подписок для одной и той же наблюдаемой, и я могу забыть обновить локальную переменную в любой из них.Позаботиться об этом в Observable - это хорошо.

myOb$ = this.myObservable$.pipe(
    tap(value=> this.myValue = value)
)

В вашем случае, если вы не вносите никаких изменений в Observable, вы можете использовать tap() вместо map()

Предположим, вы хотите обновить переменную класса, в котором Observable существует, а не там, где она подписана, тогда вы идете по этому пути.Скажем, Observable существует в Сервисе, и на него подписывается несколько компонентов, после каждого выпуска необходимо обновить переменную сервиса.

Если локальная переменная принадлежит классу, подписавшему Observable, токонечно, нет смысла делать это внутри трубы.

...