Имеет ли значение размещение функции subscribe () в коде? - PullRequest
0 голосов
/ 31 марта 2020

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

Если у меня есть следующий пример, помещенный внутри функции

  this.genericService.getXYZ().pipe(
    takeWhile(() => this.componentActive)
  ).subscribe((x) => {
    ...
  });

означает ли, что каждый раз, когда вызывается эта функция, я создаю новую подписку?

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

Мне просто любопытно, должен ли я подходить к своему коду по-другому в отношении подписок внутри функции?

1 Ответ

0 голосов
/ 31 марта 2020

Технический ответ: да, каждый раз, когда вы вызываете эту функцию, создается новая подписка.

Возьмите эту демонстрацию: https://stackblitz.com/edit/angular-fdksqf

this.subject.pipe(
  takeUntil(this.destroyed$)
).subscribe(() => {
  this.log.push('value received');
});

Если я вызову эту функцию 3 раза, я буду извлекать sh 3 значения в свойство журнала всякий раз, когда получено значение от subject.

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

...