Angular Observable Отписаться где? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть сомнения относительно того, где я должен отписаться от Observable.

У меня есть следующая функция в компоненте:

  loadProjectDetails(projectId: number): void {

console.log('>> loadProjectDetails(), id=', projectId);

const subscription = this.projectService.getProjectById(projectId).subscribe(
  data => {

    this.component = ProjectComponent;
    this.injector = Injector.create([{provide: Project, useValue: data}], this.inj);
    this.localStorageService.setLastSelection(projectId, null, null);
    subscription.unsubscribe();

  }, error => {

    if (error.status === 400) {
      alert("There is no project with id=" + projectId);
    } else {
      throw error;
    }
    subscription.unsubscribe();

  }
);
}

Имеет ли смысл отписаться в представленном способеили достаточно отменить подписку в методе ngOnDestroy () ?

Метод loadProjectDetails (projectId: number) вызывается каждый раз, когда пользователь нажимает кнопку, поэтому он запускаетсянесколько раз, прежде чем компонент будет уничтожен.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Вы не должны отписываться вручную, 90% времени.В этом конкретном случае вы используете сервис для извлечения данных.Если этот сервис использует HTTP-вызов и, следовательно, HttpClient, наблюдаемое уже закрыто после завершения вызова, а закрытые наблюдаемые уже отписаны.Если это не так, вам нужен только первый элемент, и first или take(1) - это путь.

0 голосов
/ 21 ноября 2018

Отказ от подписки в ngOnDestroy будет более чем достаточно для большинства компонентов.Тем не менее, если вам нужна ваша наблюдаемая только для чего-то конкретного, и вы будете использовать ее только один раз в компоненте с долгим сроком службы, вы можете использовать решение, которое вам необходимо для экономии ресурсов, но для одной наблюдаемой не будет большого влияния

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...