2017-02-05 4 views
1

Нужно ли нам когда-нибудь отписаться от наблюдаемого? Когда нам нужно отказаться от подписки?Почему нам нужно отказаться от подписки на Observerable?

Я прочитал статью angularfire2, в которой рассказывается об использовании firebase.auth для проверки состояния входа пользователя. В конце кода он отписывается от auth.subscribe. https://javebratt.com/angularfire2-email-auth/ (см. Приложение.component.ts).

Я был очень смущен, так как думал, что Observable «отпишет» себя после завершения или по ошибке.

Do we need to unsubscribe from observable that completes/errors-out? и Do you need to unsubscribe from Angular 2 http calls to prevent memory leak?

ответ

2

Вы правы о отпиской на complete или error уведомления.

Я думаю, что ключ комментарий в getAuth() method in auth.ts:

Обратите внимание на фактическое authState асинхронно, подписавшись на услугу идентификации: af.auth.subscribe()

Таким образом, вы должны подписаться с af.auth.subscribe(...), чтобы получать уведомления о появлении изменений в фактических authState. Это означает, что он не завершен (аналогично Observable.fromEvent(...)), и вам нужно отказаться от подписки вручную.

1

Ну, не только complete и error события отписаны от наблюдаемого, но это на самом деле proper way, чтобы отказаться от подписки.

Преимущества завершения против отписки, перечисленные в этой статье, является:

  • обычно меньше коды
  • лучше разложенном/разработан код; ваши правила завершения находятся в одном месте; где подписка начинается и где она заканчивается в одном месте
  • вы воспользоваться complete случае надо писать «завершение/очистить» код (нет unsubscribe события)
0

Я также получил ответ от автор:

Хорхе Вергара

Вам не нужно (делать отказаться от подписки()). Я делаю это, потому что я хочу, чтобы наблюдаемые могли отправлять людей на эти страницы при запуске приложения, если я собираюсь войти в систему или внести некоторые изменения в auth. Я не хочу, чтобы этот наблюдатель загорелся и перенаправлял моих пользователей.