Как пройти специальную обработку при первом выпуске Observable с одной подпиской - PullRequest
1 голос
/ 06 июня 2019

У меня есть следующий код:

this.obs$ = this.service.obs$;

this.obsSubscription = this.obs$.subscribe(
    (eltArray: Elt[]) => this.eltArray = eltArray
);

this.anotherObsSubscription =  this.obs$.pipe(take(1)).subscribe(
    (eltArray: Elt[]) => this.anotherEltArrayOnlyChangedOnce = eltArray
);

Из любопытства, но также для того, чтобы ограничить количество подписок (на которые я должен отписаться), я хотел бы знать, как я могу достичьтот же результат только с одним Subscription.

Так что я хотел бы инициализировать anotherEltArrayOnlyChangedOnce при первом излучении this.service.obs$ и установить eltArray на каждый выброс this.service.obs$,

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Вы можете добавить счетчик с оператором сканирования.

this.obs$.pipe(
    scan((acc, value) => [acc[0]++, value], [0])
).subscribe(([count, eltArray]: [number, Elt[]]) => {
    if(count === 1) {
       this.anotherEltArrayOnlyChangedOnce = eltArray;
    }
    this.eltArray = eltArray;
});
2 голосов
/ 06 июня 2019

Вы можете сделать следующее -

anotherEltArrayOnlyChangedOnce = null;

this.obs$.subscribe((eltArray: Elt[]) => {
      if(this.anotherEltArrayOnlyChangedOnce === null) {
        this.anotherEltArrayOnlyChangedOnce = eltArray
      }

      this.eltArray = eltArray
    }
   )
...