angular - Kako mogu ispisati vrijednost observable-a u konzolu?


Koristim Angular 2 i RxJS, i pitam se kako mogu napraviti sljedeće:

U svojoj komponenti definirao sam sljedeće:

count: Observable<number>;

U konstruktoru moje komponente radim sljedeće:

constructor(
    private store: Store<any>
  ) {
    this.count = this.store.select<any>(state => state.count);
  }

Kako mogu vidjeti trenutačnu vrijednost za count? Trenutno, ako napravim console.log(this.count), dobijem veliki objekt za ispis. Ako želim vidjeti samo vrijednost za this.count, kako to mogu učiniti?

Odgovor #1

S običnim observableom dobivate vrijednost samo kada se promijeni, pa ako želite ispisati vrijednost u konzolu, trebate je ispisati unutar pretplate:

constructor(
    private store: Store<any>
  ) {
    this.count = this.store.select<any>(state => state.count);
    this.count.subscribe(res => console.log(res));
  }

Međutim, ako želite moći dobiti trenutačnu vrijednost u bilo kojem trenutku, ono što ćete htjeti je BehaviorSubject (koji kombinira Observable i Observer u funkciji... uvezite ga iz rxjs biblioteke kao što to činite s Observable).

private count:BehaviorSubject<number> = new BehaviorSubject<number>(0);

constructor(
    private store: Store<any>
  ) {
    let self = this;
    self.store.select<any>(state => self.count.next(state.count));
  }

Onda, svaki put kada želite dobiti trenutnu vrijednost brojača, pozvali biste this.count.getValue(), a za promjenu vrijednosti pozvali biste this.count.next(<vrijednost koju želite unijeti>). To bi vam trebalo dati ono što tražite.

Odgovor #2

S novijim verzijama RxJS-a (koliko se sjećam, počevši od 6.0) ispravan način je koristiti .pipe(). A da odgovorim na tvoje pitanje, treba ti tap operator.

constructor(
    private store: Store<any>
  ) {
    this.count = this.store.select<any>(state => state.count).pipe(
        tap(countValue => console.log('Count: ', countValue))
    );
  }

Povezani članci