используя публиковать с темой - PullRequest
0 голосов
/ 29 августа 2018

Цель состоит в том, что существует одна служба, и 2 компонента полагаются на службу. Обновление будет инициировано извне, и все компоненты, использующие данные службы, будут уведомлены о наличии новых данных. Для этого я использую типизированную тему, которая затем публикуется в виде подключаемой наблюдаемой.

Посмотрев в отладчик, меня беспокоит то, что счетчики остаются равными 0, но я не уверен, что неправильно понимаю, что они означают. Любая информация относительно того, что ожидать и как устранить неполадки, была бы удивительной.

компоненты имеют одинаковый код

  ngOnInit() {
    this.stepService.stepsFeed.subscribe(val => {
      console.log(`Got Steps in operations`);
      this.availableOperations = val;
    });
    console.log(`subscribed`);
  }

Услуга имеет следующий

constructor(
    private http: HttpClient) {

    this.stepsSubject = new Subject<StepDefinition[]>();
    this.stepsFeed = this.stepsSubject.pipe(
      tap(_ => {
        this.log('new steps published');
      }),
      publish()
    ) as ConnectableObservable<StepDefinition[]>;

    this.getStepDefinitions()
      .subscribe(operations => {
        this.stepsFeed.connect();
        this.log('connected');
      });
  }

  private stepsUrl = 'api/steps';

  private stepsSubject: Subject<StepDefinition[]>;
  public stepsFeed: ConnectableObservable<StepDefinition[]>;

  private getStepDefinitions(): Observable<StepDefinition[]> {
    return this.http.get<StepDefinition[]>(this.stepsUrl)
      .pipe(
        tap(steps =>
        {
          this.stepsSubject.next(steps);
          this.log('fetched steps');
        }),
        catchError(this.handleError('getStepDefinitions', []))
      );
  }

Вывод выглядит следующим образом:

subscribed
subscribed
fetched steps
connected

1 Ответ

0 голосов
/ 29 августа 2018

Обходной путь:

const subscribe = example.subscribe(val => console.log(val));
const subscribeTwo = example.subscribe(val => console.log(val));

//share observable among subscribers
const sharedExample = example.pipe(share());
...